使用 BizTalk ESB 工具包 2.0
我们正在开发一个项目,我们需要调用一个 DLL 的 Web 服务的代理。我们通过业务流程执行此操作没有问题,因为您可以使用静态端口并将其配置为使用 SOAP 适配器和指向 BizTalk 管理界面中程序集的 Web 服务设置。尽管在行程中似乎没有明显的方法可以做到这一点,因为动态端口没有使用 SOAP 适配器的选项。
我们这样做是有充分理由的,不用担心。
在此之后,我们实现了一个自定义适配器提供程序,但在使其工作时遇到了问题。
我们遵循此处显示的(旧)示例:
自定义适配器提供程序继承自 BaseAdapterProvider 并覆盖 SetEndPoint(Dictionary, IBaseMessageContext) 方法。
该方法提取通过解析器字典传入的程序集名称、类型名称和方法名称,然后将它们写入管道上下文:
pipelineContext.Write("TypeName",
"http://schemas.microsoft.com/BizTalk/2003/soap-properties", typeName);
pipelineContext.Write("MethodName",
"http://schemas.microsoft.com/BizTalk/2003/soap-properties", action);
pipelineContext.Write("AssemblyName",
"http://schemas.microsoft.com/BizTalk/2003/soap-properties", assembly);
并将传输类型设置为soap:
pipelineContext.Write("TransportType",
"http://schemas.microsoft.biztalk.practices.esb.com/itinerary", "SOAP");
在所有其他方面,适配器提供程序几乎与上面链接中显示的示例相同,除了从 SMTP 到 SOAP 的明显变化。
适配器提供程序程序集已签名、GACed 并添加到 esb.config。
从只调用服务然后返回响应的行程中调用适配器提供程序。我们正在从工具包随附的行程测试客户端测试行程。自定义适配器中的事件日志显示正在调用适配器代码。问题是消息没有被路由到服务代理。事件查看器给出以下错误:
消息引擎无法处理适配器提交的消息:SOAP 源 URL:/ESB.ItineraryServices.Response/ProcessItinerary.asmx。详细信息:无法路由已发布的消息,因为找不到订阅者。如果尚未征用订阅编排或发送端口,或者未提升订阅评估所需的某些消息属性,则会发生此错误。请使用 Biztalk 管理控制台解决此故障。
调查组概述中的挂起服务实例显示了两件事:程序集名称、类型名称和方法名称的值设置正确。邮件正文丢失。我们尝试将发送端口上的发送和接收管道配置为 XMLTransmit/XMLReceive 和 ItinerarySendPassthrough/PassthroughReceive,这没有区别。
有什么我们可能遗漏的明显的东西吗?您是否必须明确传递消息正文?如果有怎么办?
编辑:
根据BizTalk ESB Toolkit 论坛的请求,我将发布行程、上下文和发送端口过滤器的屏幕截图。
非常感谢,奈杰尔。