【发布时间】:2010-11-13 19:08:08
【问题描述】:
使用 BizTalk ESB 工具包 2.0
我们正在开发一个项目,我们需要调用一个代理到一个 DLL 的 Web 服务。我们通过业务流程执行此操作没有问题,因为您可以使用静态端口并将其配置为使用 SOAP 适配器和指向 BizTalk 管理界面中程序集的 Web 服务设置。尽管在行程中似乎没有明显的方法可以做到这一点,因为动态端口没有使用 SOAP 适配器的选项。
我们这样做是有充分理由的,不用担心。
在此之后,我们实现了一个自定义适配器提供程序,但在使其工作时遇到了问题。
我们遵循here 所示的(旧)示例:
自定义适配器提供程序继承自 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 的明显变化。
适配器提供程序程序集已签名、GAC 并添加到 esb.config。
适配器提供程序是从仅调用服务然后返回响应的行程中调用的。我们正在从工具包随附的行程测试客户端测试行程。自定义适配器中的事件日志显示正在调用适配器代码。问题是消息没有被路由到服务代理。事件查看器给出以下错误:
消息引擎处理失败 适配器提交的消息:SOAP 资源 网址:/ESB.ItineraryServices.Response/ProcessItinerary.asmx。 详细信息:发布的消息可以 没有被路由,因为没有订阅者 被发现。如果出现此错误 订阅编排或发送端口 尚未入伍,或者如果某些 所需的消息属性 订阅评估尚未 晋升。请使用 Biztalk 用于故障排除的管理控制台 这次失败。
调查组概览中暂停的服务实例显示了两件事: 程序集名称、类型名称和方法名称的值设置正确。 邮件正文丢失。 我们尝试将发送端口上的发送和接收管道配置为 XMLTransmit/XMLReceive 和 ItinerarySendPassthrough/PassthroughReceive,这没有区别。
我们可能遗漏了什么明显的东西吗?您是否必须明确传递消息正文?如果有怎么办?
编辑:
在request from the BizTalk ESB Toolkit forum 之后,我发布了行程、上下文和发送端口过滤器的屏幕截图。
Itinerary, Context, Port filters.
非常感谢,奈杰尔。
【问题讨论】:
-
我会首先尝试进入你的适配器代码,看看那里到底发生了什么,看看你是否首先获得了消息数据。
标签: biztalk esb esb-toolkit-2.0