BizTalk 映射:从 soapenv:Header 获取值

BizTalk mapping: Getting a value from soapenv:Header

我正在尝试通过 xslt 从以下格式映射消息:

<soapenv:Envelope xmlns:soapenv="..." ns...>
   <soapenv:Header>
      <ns:myHeader>
         <ns1:myData>VALUE_I_WANT</ns1:myData>
      </ns:myHeader>
   </soapenv:Header>
   <soapenv:Body>
      <ns2:otherData>
         ...
      </ns2:otherData>
   </soapenv:Body>
</soapenv:Envelope>

目前我的映射处理 soapenv:Body 标签中的所有字段,但对于我映射的节点之一,我需要 soapenv:Header > ns:myHeader > [=21= 中的值].

是否可以从 XSLT 中的 soap header 中获取值,我需要什么样的 xpath 才能实现这一点?

假设您使用 WCF-BasicHttp 适配器,您可以按需要使用 xslt,但前提是您指定 Envelope -- entire <soap:Envelope> 作为 SOAP 的数据选择Body 元素。如果您不指定它,您的 header 将从消息 body 中删除并且 header 上的 xpath 语句将不可能。

您的另一个选择是从具有命名空间 http://schemas.microsoft.com/BizTalk/2006/01/Adapters/WCF-properties 的上下文 属性 InboundHeaders 中获取值。默认情况下,适配器将 SOAP header 值放入 InboundHeaders 上下文 属性 中。如果您需要映射中的上下文值,而无需编排,请尝试查看社区 Context Accessor Functoid.

也可以像您在评论中要求的那样,对 header 值进行自己的 属性 提升,但在 xslt 中不行。仅当您添加 XML Disassembler Pipeline Component,然后创建整个 soap 消息的模式,然后在模式上设置促销,最后;在管道组件的 Document schemas 部分指定模式。我不建议使用这种方法,因为它要求您部署一个 soap 架构,该架构将与默认的 BizTalk soap 架构重复。