如何配置 WCF-NetMsmq 接收位置

可以通过编程方式或使用 BizTalk 管理控制台来配置 WCF-NetMsmq 接收位置。

配置属性

BizTalk 资源管理器对象模型使你能够以编程方式创建和配置接收位置。 BizTalk 资源管理器对象模型公开IReceiveLocation 接收位置配置接口,该接口具有 TransportTypeData 读/写属性。 此属性接受一个WCF-NetMsmq接收位置配置属性包,其形式为XML字符串的名称-值对。 若要在 BizTalk 资源管理器对象模型中设置此属性,必须设置 IReceiveLocation 接口的 InboundTransportLocation 属性。

无需设置 IReceiveLocation 接口的 TransportTypeData 属性。 如果未设置,WCF-NetMsmq 适配器将使用 WCF-NetMsmq 接收位置配置的默认值,如下表所示。

下表列出了可以在 bizTalk Explorer 对象模型中为 WCF-NetMsmq 接收位置设置的配置属性。

属性名称 类型 DESCRIPTION
身份 XML Blob

示例:

<身份>

<userPrincipalName value=“username@contoso.com” />

</身份>
请指定此接收位置所提供服务的身份。 可以为 Identity 属性指定的值因安全配置而异。 这些设置使客户端能够对此接收位置进行身份验证。 在客户端和服务之间的握手过程中,Windows Communication Foundation (WCF) 基础结构将确保预期服务的标识与此元素的值匹配。

默认值为空字符串。
OpenTimeout System.TimeSpan 指定一个时间跨度值,该值表示完成通道打开操作所提供的时间间隔。

默认值:00:01:00
SendTimeout System.TimeSpan 指定一个时间跨度值,该值指示为发送操作完成所提供的时间间隔。

默认值:00:01:00
CloseTimeout System.TimeSpan 指定一个时间跨度值,该值表示为了完成通道关闭操作提供的时间间隔。

默认值:00:01:00
MaxReceivedMessageSize 整数 为可在网络上接收的消息(包括标头)指定最大大小(以字节为单位)。 消息的大小受为每个消息分配的内存量的约束。 可以使用此属性来限制拒绝服务(DoS)攻击的暴露。

默认值:65536
EnableTransaction 布尔型 指定消息队列的类型:事务性或非事务性。 如果选择此属性,则每个邮件仅传递一次,并且发送方会收到传递失败的通知。 若要通过事务性发送端口发送消息,必须将客户端的 持久恰好一次 绑定元素都设置为 True。 如果清除此属性,则会在不保证传递的情况下传输消息。 注意: 如果使用此接收位置下的事务队列,则必须选择此属性。

默认值: False
OrderedProcessing 布尔型 指定是否串行处理消息。 选择此属性后,当与设置了“已排序传递”选项的 BizTalk 消息传送或业务流程发送端口结合使用时,此接收位置将支持已排序的消息传递。 仅当 EnableTransaction 属性设置为 True 时,才能选择此选项。

有关 “订购交付 ”选项的详细信息,请参阅“另请参阅”中的相应主题。

当此属性设置为 True 时,WCF-NetMsmq 接收位置通过使适配器单线程处理大型消息时优化资源使用情况。

默认值: False
MaxConcurrentCalls 整数 指定对单个服务实例的并发调用数。 超出限制的电话调用将排队。 此属性的范围从 0 到 Int32.MaxValue

默认值:200
SecurityMode 枚举

- 没有
- 消息
- 运输
- 两者

有关 SecurityMode 属性的成员名称的详细信息,请参阅 UI 指南和开发人员 API 命名空间参考中的“WCF-NetMsmq 传输属性”对话框中的安全模式属性、“接收”、“安全”选项卡。
指定所使用的安全类型。

默认值: 传输
MsmqAuthenticationMode 枚举

- 没有
- WindowsDomain
- 证书

有关 MsmqAuthenticationMode 属性的成员名称的详细信息,请参阅 UI 指南和开发人员 API 命名空间参考中的“WCF-NetMsmq 传输属性”对话框中的MSMQ 身份验证模式属性、“接收”、“安全”选项卡。
指定 MSMQ 传输必须如何对消息进行身份验证。

默认值: WindowsDomain
MsmqProtectionLevel 枚举

- :无保护。
- 签名:消息已签名。
- EncryptAndSign:对消息进行加密和签名。 若要使用此保护级别,必须为 MSMQ 启用 Active Directory 集成
指定在 MSMQ 传输级别保护消息的方式。 加密可确保消息完整性,而签名和加密可确保消息完整性和非否认性。

默认值: 签名
MsmqSecureHashAlgorithm 枚举

- MD5
- SHA1
- SHA25
- SHA512
指定要用于计算消息摘要的哈希算法。 如果 MsmqProtectionLevel 属性设置为 None,则此属性不可用。

默认值: SHA1
MsmqEncryptionAlgorithm 枚举

- RC4Stream
- AES
指定在消息队列管理器之间传输消息时用于网络上的消息加密的算法。 仅当 MsmqProtectionLevel 属性设置为 EncryptAndSign 时,此属性才可用。

默认值: RC4Stream
MessageClientCredentialType 枚举

- 没有
- Windows
- UserName
- 证书

有关 MessageClientCredentialType 属性的成员名称的详细信息,请参阅 UI 指南和开发人员 API 命名空间参考中的“WCF-NetMsmq 传输属性”对话框中的“消息客户端凭据类型”属性、“接收”、“安全性”选项卡。
指定使用基于消息的安全性执行客户端身份验证时要使用的凭据类型。

默认值: Windows
AlgorithmSuite 枚举

有关 AlgorithmSuite 属性的成员名称的详细信息,请参阅 UI 指南和开发人员 API 命名空间参考中的“WCF-NetMsmq 传输属性”对话框中“算法”套件属性、“接收”、“安全”选项卡。
指定消息加密和密钥包装算法。 这些算法映射到安全策略语言(WS-SecurityPolicy)规范中指定的算法。

默认值: Basic256
ServiceCertificate 字符串 请为客户端用来验证该服务的接收位置指定 X.509 证书的指纹。 要用于此属性的证书必须安装到“当前用户”位置的“我的存储”中。 注意: 必须将服务证书安装到承载此接收位置的接收处理程序的用户帐户的 当前用户 位置。

默认值为空字符串。
InboundBodyLocation 枚举

- UseBodyElement - 使用传入消息的 SOAP Body 元素的内容来创建 BizTalk 消息正文部件。 如果 Body 元素具有多个子元素,则只有第一个元素成为 BizTalk 消息正文部分。
- UseEnvelope - 从传入消息的整个 SOAP 信封 创建 BizTalk 消息正文部分。
- UseBodyPath - 使用 InboundBodyPathExpression 属性中的正文路径表达式创建 BizTalk 消息正文部件。 根据传入消息的 SOAP Body 元素的即时子元素计算正文路径表达式。 此属性仅适用于请求响应端口。

有关如何使用 InboundBodyLocation 属性的详细信息,请参阅 指定 WCF 适配器的消息正文
指定传入 WCF 消息的 SOAP Body 元素的数据选择。

默认值: UseBodyElement
InboundBodyPathExpression 字符串

有关如何使用 InboundBodyPathExpression 属性的详细信息,请参阅 WCF 适配器属性架构和属性
指定正文路径表达式以标识用于创建 BizTalk 消息正文部件的传入消息的特定部分。 此正文路径表达式根据传入消息的 SOAP 正文 节点的直接子元素计算。 如果此正文路径表达式返回多个节点,则仅为 BizTalk 消息正文部分选择第一个节点。 如果将 InboundBodyLocation 属性设置为 UseBodyPath,则需要此属性。

默认值为空字符串。
InboundNodeEncoding 枚举

- Base64 - Base64 编码。
- 十六进制 - 十六进制编码。
- 字符串 - 文本编码 - UTF-8。
- XML - WCF 适配器根据 InboundBodyPathExpression 中的正文路径表达式,选择节点的外层 XML 来创建 BizTalk 消息正文。
指定 WCF-NetMsmq 接收适配器用来解码节点的编码类型,该节点由 InboundBodyPathExpression 中指定的正文路径表达式标识。 如果将 InboundBodyLocation 属性设置为 UseBodyPath,则需要此属性。

默认值: XML
DisableLocationOnFailure 布尔型 指定是否要禁用由于接收管道故障或路由失败而导致入站处理失败的接收位置。

默认值: False
失败时暂停消息 布尔型 指定是否因接收管道故障或路由失败, 而挂起入站处理失败的请求消息。

默认值: True
IncludeExceptionDetailInFaults 布尔型 指定是否在返回给客户端的 SOAP 错误的详细信息中包含托管异常信息,以便进行调试。

默认值: False

使用 BizTalk 管理控制台配置 WCF-NetMsmq 接收位置

可以在 BizTalk 管理控制台中设置 WCF-NetMsmq 接收位置适配器变量。 如果未在接收位置设置属性,将使用 BizTalk 管理控制台中设置的默认接收处理程序值。

注释

在完成以下过程之前,必须已添加接收端口。 有关详细信息,请参阅 如何创建接收端口

注释

WCF 客户端和 WCF-NetMsmq 接收位置的绑定配置必须匹配。 如果它们不匹配,则 WCF-NetMsmq 接收位置可能会丢失传入消息。

为 WCF-NetMsmq 接收位置配置变量

  1. 在 BizTalk 管理控制台中,展开 BizTalk Server管理BizTalk 组应用程序,然后展开要在其中创建接收位置的应用程序。

  2. 在 BizTalk 管理控制台的左窗格中,单击 “接收端口 ”节点。 然后在右窗格中,右键单击与现有接收位置关联的接收端口或要与新接收位置关联的接收端口,然后单击“ 属性”。

  3. “接收端口属性 ”对话框中的左窗格中,选择“ 接收位置”,然后在右窗格中双击现有接收位置,或单击“ 新建”创建新的接收位置。

  4. 在“接收位置属性”对话框中,在“类型”旁边的“传输”部分中,从下拉列表中选择 WCF-NetMsmq,然后单击“配置”。

  5. “WCF-NetMsmq 传输属性 ”对话框中的“ 常规 ”选项卡上,为 WCF-NetMsmq 接收位置配置终结点地址和服务标识。 有关“WCF-NetMsmq 传输属性”对话框中的“常规”选项卡的详细信息,请参阅 UI 指南和开发人员 API 命名空间参考中的“WCF-NetMsmq 传输属性”对话框、“接收”、“常规”选项卡。

  6. “WCF-NetMsmq 传输属性 ”对话框中的“ 绑定 ”选项卡上,配置超时和事务属性。 有关“WCF-NetMsmq 传输属性”对话框中的“绑定”选项卡的详细信息,请参阅 UI 指南和开发人员 API 命名空间参考中的“WCF-NetMsmq 传输属性”对话框、“接收”、“绑定”选项卡。

  7. “WCF-NetMsmq 传输属性 ”对话框中的“ 安全 ”选项卡上,定义 WCF-NetMsmq 接收位置的安全功能。 有关“WCF-NetMsmq 传输属性”对话框中的“安全”选项卡的详细信息,请参阅 UI 指南和开发人员 API 命名空间参考中的“WCF-NetMsmq 传输属性”对话框、“接收”、“安全”选项卡。

  8. “WCF-NetMsmq 传输属性 ”对话框中的“ 消息 ”选项卡上,指定 SOAP 正文 元素的数据选择。 有关“WCF-NetMsmq 传输属性”对话框中的“消息”选项卡的详细信息,请参阅 UI 指南和开发人员 API 命名空间参考中的“WCF-NetMsmq 传输属性”对话框、“接收”、“消息”选项卡。

以编程方式配置 WCF-NetMsmq 接收位置

可以使用以下格式设置属性:

<CustomProps>
  <ServiceCertificate vt="8" />
  <InboundBodyLocation vt="8">UseBodyElement</InboundBodyLocation>
  <InboundBodyPathExpression vt="8" />
  <MessageClientCredentialType vt="8">Windows</MessageClientCredentialType>
  <SendTimeout vt="8">00:01:00</SendTimeout>
  <IncludeExceptionDetailInFaults vt="11">0</IncludeExceptionDetailInFaults>
  <OpenTimeout vt="8">00:01:00</OpenTimeout>
  <AlgorithmSuite vt="8">Basic256</AlgorithmSuite>
  <MaxConcurrentCalls vt="3">16</MaxConcurrentCalls>
  <SecurityMode vt="8">Transport</SecurityMode>
  <OrderedProcessing vt="11">0</OrderedProcessing>
  <CloseTimeout vt="8">00:01:00</CloseTimeout>
  <MsmqEncryptionAlgorithm vt="8">RC4Stream</MsmqEncryptionAlgorithm>
  <MaxReceivedMessageSize vt="3">2097152</MaxReceivedMessageSize>
  <MsmqProtectionLevel vt="8">Sign</MsmqProtectionLevel>
  <DisableLocationOnFailure vt="11">0</DisableLocationOnFailure>
  <MsmqSecureHashAlgorithm vt="8">Sha1</MsmqSecureHashAlgorithm>
  <SuspendMessageOnFailure vt="11">-1</SuspendMessageOnFailure>
  <EnableTransaction vt="11">-1</EnableTransaction>
  <InboundNodeEncoding vt="8">Xml</InboundNodeEncoding>
  <MsmqAuthenticationMode vt="8">WindowsDomain</MsmqAuthenticationMode>
</CustomProps>

以下代码片段演示如何创建 WCF-NetMsmq 接收位置:

谨慎

此示例或指南引用敏感信息,例如连接字符串或用户名和密码。 切勿在代码中硬编码这些值,并确保使用最安全的身份验证来保护机密数据。 有关详细信息,请参阅以下文档:

// Use BizTalk Explorer object model to create new WCF-NetMsmq receive location
string server = System.Environment.MachineName;
string database = "BizTalkMgmtDb";
string connectionString = string.Format("Server={0};Database={1};Integrated Security=true", server, database);
string transportConfigData = @"<CustomProps>
  <InboundBodyLocation vt=""8"">UseBodyElement</InboundBodyLocation>
  <UseSSO vt=""11"">0</UseSSO>
  <Identity vt=""8"">
    <identity>
    <userPrincipalName value=""username@contoso.com"" />
    </identity>
  </Identity>
</CustomProps>";
//requires project reference to \Program Files\Microsoft BizTalk Server 2009\Developer Tools\Microsoft.BizTalk.ExplorerOM.dll
BtsCatalogExplorer explorer = new Microsoft.BizTalk.ExplorerOM.BtsCatalogExplorer();
explorer.ConnectionString = connectionString;
// Add a new BizTalk application
Application application = explorer.AddNewApplication();
application.Name = "SampleBizTalkApplication";
// Save
explorer.SaveChanges();

// Add a new one-way receive port
IReceivePort receivePort = application.AddNewReceivePort(false);
receivePort.Name = "SampleReceivePort";
// Add a new one-way receive location
IReceiveLocation receiveLocation = receivePort.AddNewReceiveLocation();
receiveLocation.Name = "SampleReceiveLocation";
// Find a receive handler for WCF-NetMsmq
int i = 0;
for(i=0; i < explorer.ReceiveHandlers.Count; ++i)
{
    if("WCF-NetMsmq" == explorer.ReceiveHandlers[i].TransportType.Name)
        break;
}
receiveLocation.ReceiveHandler = explorer.ReceiveHandlers[i];
receiveLocation.Address = "net.msmq://mycomputer/private/sampleQueue";
receiveLocation.ReceivePipeline = explorer.Pipelines["Microsoft.BizTalk.DefaultPipelines.PassThruReceive"];
receiveLocation.TransportType = explorer.ProtocolTypes["WCF-NetMsmq"];
receiveLocation.TransportTypeData = transportConfigData;
// Save
explorer.SaveChanges();

另请参阅

发布用于 WCF 接收适配器的服务元数据管理 BizTalk 主机和主机实例如何更改服务帐户和密码为 WCF 适配器安装证书为 WCF 适配器指定消息正文配置 WCF-NetMsmq 适配器有序传递消息在事务内发送和检索消息消息队列和 Active Directory公共队列和专用队列