代码之家  ›  专栏  ›  技术社区  ›  Rich

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

  •  0
  • Rich  · 技术社区  · 14 年前

    在使用WCF适配器时,我将消息正文部分作为WCF消息的正文发送,但我是否可以使Biztalk消息上下文也被发送(希望是在WCF消息头中)?

    1 回复  |  直到 14 年前
        1
  •  3
  •   Maxime Labelle    14 年前

    这个 following page in MSDN 简洁地说明如何使用WCF适配器在BizTalk外部发送消息时使用自定义SOAP头。

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

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

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

    当使用WCF适配器时,SOAP头由内置的 WCF.OutboundCustomHeaders 上下文属性。这个财产持有 全部的 自定义SOAP头,包装在附加的<头>标记中。

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

    请注意,用于上述说明的自定义SOAP头<tns1:Header1>和<tns2:Header2>必须是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)
      ));
    

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