将Biztalk消息上下文发送到WCF服务

时间:2010-11-19 19:54:13

标签: wcf biztalk

当使用WCF适配器时,我将消息正文部分作为WCF消息的主体发送,但我是否可以执行以便发送Biztalk消息上下文(希望在WCF消息头中)?< / p>

1 个答案:

答案 0 :(得分:3)

following page in MSDN简洁地解释了在使用WCF适配器在BizTalk外部发送消息时如何使用自定义SOAP标头。

基本上,您无法直接在BizTalk外部发送BizTalk消息的上下文。这将毫无意义。相反,您可以在BizTalk消息的上下文中选择属性的子集,以通过自定义SOAP标头发送到WCF适配器。

处理传出WCF请求的自定义SOAP标头

与传出请求关联的SOAP标头必须显式写入传出消息的上下文。

使用WCF适配器时,SOAP标头使用内置的WCF.OutboundCustomHeaders context属性定义。此属性包含所有自定义SOAP标头,包含在其他&lt; headers&gt;内。标签

可以在业务流程中使用以下语法在表达式形状中指定标头:

OutboundMessage(WCF.OutboundCustomHeaders) = "" +
  "<headers>"
  "<tns1:Header1 xmlns:tns1='http://tns1'>" +
  "</tns1:Header1>" +
  "<tns2:Header2 xmlns:tns2='http://tns2'>" +
  "</tns2:Header2>" +
  "</headers>" +
  "";

请注意,自定义SOAP标头&lt; tns1:Header1&gt;和&lt; tns2:Header2&gt;用于上述说明目的必须是您的WCF服务合同的一部分。为使用的WCF服务创建服务引用时,这些自定义SOAP标头将作为业务流程中生成的模式提供。

如何在自定义SOAP标头中发送特定的上下文属性

现在您已了解如何指定自定义SOAP标头,您可以使用此语法将消息上下文中的特定属性发送到自定义SOAP标头,如下所示:

OutboundMessage(WCF.OutboundCustomHeaders) =
  System.String.Format(
    "" +
    "<headers>"
    "<tns1:Header1 xmlns:tns1='http://tns1'>" +
    "  <tns1:Property1>{0}</tns1:Property1>" +
    "  <tns1:Property2>{1}</tns1:Property2>" +
    "</tns1:Header1>" +
    "</headers>" +
    ""
  , InboundMessage(FILE.ReceivedFileName)
  , InboundMessage(BTS.MessageType)
  ));

在上面的示例中,已选择并在自定义SOAP标头内写入两个内置上下文属性FILE.ReceivedFileName和BTS.MessageType。在实际场景中,您需要在使用它们之前检查属性是否存在于上下文中。

您也可以使用任何自定义上下文属性,前提是它们已在适当的属性架构中声明。

相关问题