如何将 LicenseKey 添加到 BizTalk SendPort 中的 Web 服务调用?

How to add a LicenseKey to an Webservice Call in a BizTalk SendPort?

我需要与 web-service 通信,但需要传递许可证密钥。

我生成了架构,但我的映射要求我映射到 "OrderInfoObject" 节点。

我尝试创建一个映射来添加带有许可证密钥的 soap 信封,这创建了在我将其复制到 soapUI 时有效的代码,但即使我设置了入站消息也会被双重封装 (<soapenv:Envelope><soapenv:Body><soapenv:Envelope><soapenv:Body>) body 到信封 -- 整个 Body -- 内容。

所以我的映射具有以下内容

 <wms:OrderInfoObject>
   ...
 </wms:OrderInfoObject>

并且发送端口在 soapbody 中添加了

<soapenv:Envelope xmlns:soapenv="..." xmlns:wms="...">
  <soapenv:Header>
  </soapenv:Header>
  <soapenv:Body>
 -- Here comes my message --
</soapenv:Body>
</soapenv:Envelope>

发送端口是通过使用 WSDL 生成的,所以我对它的工作方式没有信心,但 Header 似乎遥不可及。

所以我不确定如何添加许可证密钥。

您关注的是 LicenseKey 的错误外观。您需要在 OrderInfoObject 下的某处找到后代实现。

架构不太可能有任何问题,因为可以在根定义任何数字元素,然后在 'real' 根元素下的某处引用。

为了清理,您可以将此架构的根引用设置为 OrderInfoObject,然后所有 'Type' 元素将被隐藏。

但是,如果 LicenseKey 需要是一个 SOAP Header 元素,您可以使用 WCF.OutboundCustomHeaders 属性 向其添加元素部分。

这篇 MSDN 文章描述了这个过程:Using SOAP Headers in WCF Messages with Orchestrations