3

我正在编写一个 biztalk 编排,它需要调用一个 Web 服务,可能是多个 Web 服务,并且可能不止一次。我看到了两个选择;第一,在单独的代码项目中使用 wsdl,并从表达式形状的代码中调用 Web 服务,第二,从 Biz 中使用它,获取模式等,并通过请求/响应端口调用。这里的最佳做法是什么?一方面,如果更新了 wsdl,那么更新代码将比更新模式和端口更容易,而且为多个 Web 服务调用构建足够多的端口似乎有很多混乱和工作。另一方面,您可以在端口级别进行的所有调整(重试一次)使得调用 Web 服务变得健壮。

4

2 回答 2

4

另请参阅此处的此问题,其中讨论了第三个选项,即add service reference在 BizTalk 中使用作为导入 XSD 的替代方法。

IMO,您将通过使用 .NET 代理处理集成来击败使用 BizTalk 的点。例如:

  1. 您正在对协议 (WCF) 进行硬编码,现在需要将请求和响应消息编组到/来自您的自定义代码。使用发送端口,可以在部署时配置任何请求-响应机制 - 特别适用于单元和集成测试。
  2. 您将失去 BizTalk 消息传递机制的所有好处,例如重试、备份传输、恢复挂起的消息、不同端口的不同映射以及可以说的整个 pub sub 功能(例如,如果多个侦听器想要收听来自被调用 Web 服务的响应?)
  3. 您将在哪里存储 WCFserviceModel配置设置,例如端点等?即您失去了绑定文件的灵活性。
    • 等等

因此,TL;DR 始终在 BizTalk 中使用 WCF 适配器

但是,也就是说,我同意如果使用的服务发生变化,更新生成的项目可能会很混乱。FWIW,我们减轻了其中的一些,如下所示:

  • 始终创建一个单独的空文件夹,在其中导入所有导入的生成工件。
  • 保留所有生成的项目“原样”,即不要试图移动虚拟 .odx 或删除它(因为它具有预配置的端口类型)

不幸的是,这留下了仍然需要手动应用的以下操作:

  • 请记住将端口类型的可见性更改为public工件是否在您的编排的单独程序集中
  • 需要重新应用导入模式上的提升和区分属性(例如,记住在任何更改后记录屏幕截图)。<xs:annotation>可能这可以通过在 schma 部分中保存和重新粘贴来简化或自动化。
  • 如果您在 WCF 服务中使用消息协定,并且在多个应用程序中重复使用相同的引用消息,您将需要手动删除由添加生成项创建的重复项,然后重新引用现有架构。(例如,我们对所有 BizTalk 调用都有一个标准的“响应”消息)
于 2012-12-06T12:16:11.237 回答
0

有趣的是,您可以同时拥有这两种情况。看看这个萨拉瓦纳库马尔!

它使用直通接收并使用发送端口上的 dll 使用 Web 服务,而无需经历创建模式和 Web 端口的痛苦。

这提供了 Biztalk 的所有功能(路由响应、发送端口配置等),并且仍然可以灵活地更改架构而无需大惊小怪。

于 2012-12-06T12:20:07.970 回答