所以终于设法找到了一个解决方案,我必须完全归功于this guy
问题是 Microsoft.Practices.ESB.Services.Routing 服务仅提供单向操作,因此即使您将解析器标记为双向消息交换模式,它也无法正常工作。
如果您在 BizTalk 管理控制台中检查 Microsoft.Practices.ESB 应用程序,它具有单向动态发送端口 Microsoft.Practices.ESB.Agents_2.1.0.0_Microsoft.Practices.ESB.Agents.Delivery_DeliveryPort_31bf3856ad364e35 绑定到编排 Microsoft .Practices.ESB.Agents.Delivery。当您使用 Orchestration 扩展程序并使用 Microsoft.Practices.ESB.Services.Routing 服务时,此端口用于发送任何调用,并且由于这是单向端口,因此您不会得到响应。
您需要在 callwebservice 形状中使用双向编排。 MultipleWebServices ESB 示例中提供了一个双向编排示例。如果您部署该编排并将其注册为行程服务并以 callwebservice 形式使用它,它将起作用。
它或多或少做到了:) 部署编排并将其作为行程服务注册到 ESB,方法是在 itineraryServices 节点之间的 esb 配置中添加一个条目:
<itineraryService id="04BD6120-06E4-43D3-A56F-2FF061D59862" name="ESB.MultipleWebServices.Orchestrations.TwoWayRouting" type="ESB.MultipleWebServices.Orchestrations.TwoWayRouting, Biztalk.EsbGeneric.Orchestrations, Version=1.0.0.0, Culture=neutral, PublicKeyToken=140bc5dcbb9afcea" scope="Orchestration" stage="None"/>
使用 guidgen 创建一个 id,类型由管理控制台中编排的名称和程序集(逗号分隔)组成,并且会根据您部署到的应用程序而有所不同。范围和阶段如上图。
最初我在发送端口 Biztalk.HoopleEsbGeneric.Orchestrations_1.0.0.0_ESB.MultipleWebServices.Orchestrations.TwoWayRouting_RoutingPort_140bc5dcbb9afcea 上遇到错误,但将发送和接收管道分别更改为 PassThruTransmit 和 PassThruReceive 解决了这个问题。