2

使用 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 论坛的请求,我将发布行程、上下文和发送端口过滤器的屏幕截图。

行程上下文端口过滤器

非常感谢,奈杰尔。

4

2 回答 2

1

首先,我会说您正在尝试过度设计解决方案。适配器开发并非易事,您需要考虑各种事项。开发和部署适配器被归类为平台更改,这会影响您的整个环境,因此如果您不熟悉,那么您不应该这样做。我建议你走其他路线。在这一点上,我个人对 ESB 内部没有足够的了解,因此无法对此发表评论。在最坏的情况下,您最好在编排(表达式或消息形状)中直接使用 .NET 代理 dll,而不是构建适配器。即使它不推荐的方法,我仍然觉得它比自定义适配器方法更好。

于 2009-07-27T08:27:46.840 回答
0

从语义上讲,我不明白为什么涉及 WCF-BasicHtpp 适配器的解决方案在您的场景中不起作用。无论如何,我肯定会尝试看看 WCF-BasicHttp 适配器会发生什么,一旦我得到一个可行的解决方案,如果确实有必要,我会切换到自定义 SOAP 适配器。

目前,您的解决方案很奇怪 - 从某种意义上说,您有一个直接连接到出口匝道的入口匝道。我从未在我的任何行程中看到过这种情况。您可能需要在两者之间创建中间消息传递或编排行程服务。

否则,消息会有效地发布到消息框,并且显然没有订阅者,因此您会遇到错误。

于 2011-01-17T08:20:44.763 回答