如何配置 WCF-NetMsmq 发送端口

可以通过编程方式或使用 BizTalk 管理控制台配置 WCF-NetMsmq 发送端口。

配置属性

BizTalk 资源管理器对象模型为发送端口公开一个适配器特定的接口,该接口名为 ITransportInfo,并具有 TransportTypeData 读/写属性。 此属性接受一个 WCF-NetMsmq 发送端口配置属性包,该包以 XML 字符串的名称-值对形式存在。

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

下表列出了可在 BizTalk 资源管理器对象模型中为 WCF-NetMsmq 发送端口设置的配置属性。

属性名称 类型 DESCRIPTION
身份 XML Blob

示例:

<身份>

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

</身份>
指定此发送端口所需的服务标识。 这些设置使此发送端口能够对服务进行身份验证。 在客户端和服务之间的握手过程中,Windows Communication Foundation (WCF) 基础结构将确保预期服务的标识与此元素的值匹配。

默认值为空字符串。
StaticAction 字符串 指定传出消息的 SOAPAction 标头字段。 还可以通过管道或流程编排中的消息上下文属性 WCF.Action 设置此属性。 可以通过两种不同的方式指定此值:单一动作格式和动作映射格式。 如果在单个操作格式中设置此属性,例如,http://contoso.com/Svc/Op1,那么传出消息的 SOAPAction 标头始终设置为此属性中指定的值。

如果在动作映射格式中设置此属性,传出的 SOAPAction 标头由 BTS.Operation 上下文属性确定。 例如,如果此属性设置为以下 XML 格式,并且 BTS.Operation 属性设置为 Op1,WCF 发送适配器对传出 SOAPAction 标头使用 http://contoso.com/Svc/Op1。

<BtsActionMapping>

<操作名称=“Op1” Action=“http://contoso.com/Svc/Op1" />

<操作名称=“Op2” Action=“http://contoso.com/Svc/Op2" />

</BtsActionMapping>

如果传出消息来自业务流程端口,业务流程实例会动态设置 BTS.Operation 属性为端口的操作名称。 如果传出消息是通过基于内容的路由进行的,则可以在管道组件中设置 BTS.Operation 属性。

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

默认值:00:01:00
SendTimeout System.TimeSpan 指定一个时间跨度值,该值指示为发送操作完成所提供的时间间隔。 如果使用请求响应发送端口,则此值指定整个交互完成的时间跨度,即使服务返回大型消息也是如此。

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

默认值:00:01:00
EnableTransactional 布尔型 指定目标服务的消息队列的类型:事务性或非事务性。 如果此属性设置为 True,则此发送端口处理的每个消息仅传递一次,并且发送方会收到传递失败的通知。 若要通过事务发送端口发送消息,必须将服务的 持久 绑定元素和 精确一次 绑定元素都设置为 “True”。 如果此属性设置为 False,则会传输消息而不保证传递。

默认值: True
DeadLetterQueue 枚举

- - 不使用死信队列。
- 系统 - 使用系统范围的死信队列。
- 自定义 - 使用自定义死信队列。
指定死信队列,用于传送未能传递到应用程序的消息。 有关传递到死信队列的消息的详细信息,请参阅 UI 指南和开发人员 API 命名空间参考中的“WCF-NetMsmq 传输属性”对话框、“发送”、“绑定”选项卡。

注意:自定义死信队列仅在随 Windows Vista 发布的消息队列(MSMQ)4.0 中受支持。

默认值: 系统
自定义死信队列 字符串 使用 net.msmq 方案为每个应用程序死信队列的位置指定完全限定的 URI,其中放置了已过期或传输失败或传递失败的消息。 例如,net.msmq://localhost/deadLetterQueueName。 死信队列是发送应用程序的队列管理器上的一个队列,用于存放未能传递的过期消息。 如果 DeadLetterQueue 属性设置为 Custom,则需要此属性。

默认值为空字符串。
TimeToLive System.TimeSpan 指定消息在过期前的有效时间跨度,并将其放入死信队列中。 此属性设置为确保时间敏感消息在此发送端口处理之前不会变得过时。 在指定时间间隔内未被该发送端口处理的队列消息将被视为已过期。 过期的消息将发送到称为死信队列的特殊队列。 死信队列的位置是使用 DeadLetterQueue 属性设置的。

默认值:1.00:00:00
UseSourceJournal 布尔型 指定是否应将此发送端口处理的消息副本存储在源日记队列中。

默认值: False
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
ClientCertificate 字符串 指定 X.509 证书的指纹,用于向服务验证此发送端口。 如果将 ClientCredentialsType 属性设置为 Certificate,则需要此属性。 要用于此属性的证书必须安装到“当前用户”位置的“我的存储”中。

默认值为空字符串。
ServiceCertificate 字符串 指定 X.509 证书的指纹,用于对发送端口向其发送消息的服务进行身份验证。 要用于此属性的证书必须安装到“其他人”存储中,位于本地计算机的位置。

默认值为空字符串。
AffiliateApplicationName 字符串 指定要用于企业单一 Sign-On(SSO)的关联应用程序。

默认值为空字符串。
UseSSO 布尔型 指定是否使用单一 Sign-On 来获取客户端凭据,以用于与目标服务器进行身份验证。

默认值: False
UserName 字符串 UseSSO 属性设置为 False 时,指定用于向目标服务器进行身份验证的用户名。 无需对此属性使用域\用户格式。

默认值为空字符串。
密码 字符串 UseSSO 属性设置为 False 时,指定用于向目标服务器进行身份验证的密码。

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

- UseBodyElement - 使用 BizTalk 消息正文部件为传出消息创建 SOAP Body 元素的内容。
- UseTemplate - 使用 OutboundXMLTemplate 属性中提供的模板为传出消息创建 SOAP Body 元素的内容。

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

默认值: UseBodyElement
OutboundXMLTemplate 字符串

有关如何使用 OutboundXMLTemplate 属性的详细信息,请参阅 指定 WCF 适配器的消息正文
为传出消息的 SOAP Body 元素的内容指定 XML 格式的模板。 如果 OutboundBodyLocation 属性设置为 UseTemplate,则此属性是必需的。

默认值为空字符串。

使用 BizTalk 管理控制台配置 WCF-NetMsmq 发送端口

可以在 BizTalk 管理控制台中设置 WCF-NetMsmq 发送端口适配器变量。 如果未为发送端口设置属性,则使用 WCF-NetMsmq 发送端口配置的默认值,如上表中所示。

为 WCF-NetMsmq 发送端口配置变量

  1. 在 BizTalk 管理控制台中,创建新的发送端口,或双击现有发送端口对其进行修改。 有关详细信息,请参阅 如何创建发送端口。 配置所有发送端口选项,并为 UI 指南和开发人员 API 命名空间引用的“常规”选项卡的“传输”部分中的“类型”选项指定 WCF-NetMsmq

  2. 在“常规”选项卡上的“传输”部分中,单击“类型”旁边的“配置”按钮。

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

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

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

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

以编程方式配置 WCF-NetMsmq 发送端口

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

<CustomProps>  
  <ServiceCertificate vt="8" />  
  <UseSSO vt="11">0</UseSSO>  
  <CloseTimeout vt="8">00:01:00</CloseTimeout>  
  <MessageClientCredentialType vt="8">Windows</MessageClientCredentialType>  
  <SendTimeout vt="8">00:01:00</SendTimeout>  
  <OutboundXmlTemplate vt="8"><bts-msg-body xmlns="http://www.microsoft.com/schemas/bts2007" encoding="xml"/></OutboundXmlTemplate>  
  <MsmqProtectionLevel vt="8">Sign</MsmqProtectionLevel>  
  <OpenTimeout vt="8">00:01:00</OpenTimeout>  
  <UseSourceJournal vt="11">0</UseSourceJournal>  
  <AlgorithmSuite vt="8">Basic256</AlgorithmSuite>  
  <SecurityMode vt="8">Transport</SecurityMode>  
  <CustomDeadLetterQueue vt="8" />  
  <ClientCertificate vt="8" />  
  <MsmqEncryptionAlgorithm vt="8">RC4Stream</MsmqEncryptionAlgorithm>  
  <StaticAction vt="8">http://www.northwindtraders.com/Service/Operation</StaticAction>  
  <MsmqSecureHashAlgorithm vt="8">Sha1</MsmqSecureHashAlgorithm>  
  <EnableTransaction vt="11">-1</EnableTransaction>  
  <TimeToLive vt="8">1.00:00:00</TimeToLive>  
  <MsmqAuthenticationMode vt="8">WindowsDomain</MsmqAuthenticationMode>  
  <DeadLetterQueue vt="8">System</DeadLetterQueue>  
  <OutboundBodyLocation vt="8">UseBodyElement</OutboundBodyLocation>  
</CustomProps>  

以下代码片段演示如何创建 WCF-NetMsmq 发送端口:

谨慎

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

// Use BizTalk Explorer object model to create new WCF-NetMsmq send port.  
string server = System.Environment.MachineName;  
string database = "BizTalkMgmtDb";  
string connectionString = string.Format("Server={0};Database={1};Integrated Security=true", server, database);  
string transportConfigData = @"<CustomProps>  
                                 <StaticAction vt=""8"">http://www.northwindtraders.com/Service/Operation</StaticAction>  
                                 <OpenTimeout vt=""8"">00:01:00</OpenTimeout>  
                               </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 static one-way send port  
SendPort sendPort = application.AddNewSendPort(false, false);   
sendPort.Name = "SampleSendPort";  
sendPort.PrimaryTransport.TransportType = explorer.ProtocolTypes["WCF-NetMsmq"];  
sendPort.PrimaryTransport.Address = "net.msmq://mycomputer/private/samplequeue";  
sendPort.PrimaryTransport.TransportTypeData = transportConfigData; // propertyData; // need to change  
sendPort.SendPipeline = explorer.Pipelines["Microsoft.BizTalk.DefaultPipelines.PassThruTransmit"];  
// Save  
explorer.SaveChanges();  

另请参阅

WCF 适配器的属性架构和属性
用于 WCF 适配器的证书安装
为 WCF 适配器指定消息体
配置 WCF-NetMsmq 适配器
使用 WCF 适配器上下文属性配置动态发送端口