1

我正在尝试在 biztalk 中构建一条消息以发送到 Web 服务。当我从 c# 调用 Web 服务时,我看到的流量(来自 fiddler)基本上是这样的:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Header>
        <h:AuthenticationInfo xmlns:h="urn:Ticket" xmlns="urn:Ticket" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
            <userName>user_name</userName>
            <password>password</password>
            <authentication/>
            <locale/>
            <timeZone/>
        </h:AuthenticationInfo>
    </s:Header>
    <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <CreateTroubleTicket xmlns="urn:Ticket">
            <ServiceID>asd</ServiceID>
            <ServiceType>service Type</ServiceType>
            <Impact>1</Impact>
            <Priority>1 - Critical</Priority>
        </CreateTroubleTicket>
    </s:Body>
</s:Envelope>

这将返回预期的响应。我在网上找到了有关如何在 BizTalk 中使用它的说明,即。添加肥皂标题(http://threaddump.blogspot.com/2005/01/how-to-send-soap-headers-in-biztalk.htmlhttp://www.apress.com/9781430232643有第 2.13 章的演练和代码),我已经遵循了它们。但是,我无法创建您在上面看到的标题。当 biz 发送到网络服务时,我看到只有身体来自提琴手;

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><ns0:CreateTroubleTicket xmlns:ns0="urn:Ticket">
  <ns0:ServiceID>ServiceID_0</ns0:ServiceID> 
  <ns0:ServiceType>ServiceType_0</ns0:ServiceType> 
  <ns0:Impact>1</ns0:Impact> 
  <ns0:Priority>1 - Critical</ns0:Priority> 
</ns0:CreateTroubleTicket></s:Body></s:Envelope>

我可以将提升的属性分配给我想要的字符串。我知道这一点是因为当我查看挂起的消息时(在它未能从服务获得合法响应之后),我看到该属性具有我在消息上下文中给它的值:

在此处输入图像描述

要清楚我做了什么才能走到这一步;我添加了一个带有目标命名空间“ http://schemas.microsoft.com/BizTalk/2003/SOAPHeader ”的属性架构,以及一个名为“AuthenticationInfo”的元素,其属性架构基设置为“MessageContextPropertyBase”。然后,我在编排中将其分配给消息的提升属性,如下所示:

MessageInwHeader(TempBizConsumeHeader.AuthenticationInfo)= @"<ns0:AuthenticationInfo xmlns:ns0=ur..."

因此,如果有人在这里看到错误或知道为什么我没有在请求中看到此标头,请告诉我。也许我需要一个特殊的发送管道,或者我需要定义一个完整的信封?我认为使用 WCF 服务(我调用的不是)有一个现成的属性,WCFOutboundHeaders 或类似的东西。我很想有一个我可以使用的...

4

1 回答 1

2

如果我理解正确,您正在尝试通过 BizTalk 发送端口将带有自定义标头的消息发送到 WebService。

有一个名为 的内置属性WCF.OutboundCustomHeaders,您应该使用它,您的属性分配将是这样的:

MessageInwHeader(WCF.OutboundCustomHeaders) = "<headers><h:AuthenticationInfo xmlns:h=\"urn:Ticket\" xmlns=\"urn:Ticket\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"><userName>user_name</userName></h:AuthenticationInfo></headers>";

如果您要经常使用这些标头,可能您可以为此创建一些帮助程序。

于 2013-07-26T13:52:08.793 回答