在 BizTalk 业务流程中使用 类 和方法

Using Classes and Methods in BizTalk Orchestrations

我继承了支持和开发 BizTalk 应用程序作为我开发角色的一部分。 我是一名普通的 C# 开发人员,所以我很高兴看到我可以创建 类 并从 Orchestration 的表达式形状调用方法。 这意味着我可以使用我熟悉的代码更快地完成所有数据操作,而不是学习 BizTalk 方法。

此时我不关心这是否是个好主意。

是否有任何我不应该这样做的纯技术原因?

从技术上讲,您正在添加部署并维护外部程序集的复杂性,例如,某些合同中的任何更改都需要更改程序集和编排。 而且您正在失去 BizTalk 映射引擎在数据转换方面的所有优势,这通常是一个容易学习的部分。

我这么说,在 "BizTalk Way".

中开发 BizTalk 应用程序对于未来的可维护性非常重要

例如,如果您在外部 class 中执行本应在 Map 或 XPath 中完成的消息操作,我将在 Code Review 中失败,您将不得不重构。

原因是因为无论谁可能从您那里接手,都应该期待 BizTalk 应用程序。我见过您所描述的情况,它确实使升级、增强和支持新业务需求变得更加困难,因为现在开发人员必须适应 BizTalk 和外部流程。

从技术上讲,使用 .NET classes 不会破坏 BizTalk 中的任何内容。许多 BizTalk 组件都基于 .NET 框架,例如适配器、管道组件等。在我看来,根据具体情况使用 BizTalk 和 .NET 的最佳选择。例如如果您需要将入站 XML 映射到出站 XML,请使用 BizTalk 映射,因为它们实施起来更容易、更快捷,在这种情况下,使用 .NET class 比使用映射更乏味.我认为使用 BizTalk 功能(如地图、业务流程、管道组件)的学习曲线并不大。

您必须确保您调用的任何外部方法都muli-threading 能够处理高吞吐量。

如果您没有实现上述目标,那么您要么会遇到一些非常奇怪的问题(由跨线程污染引起),要么会导致 BizTalk 出现瓶颈,从而降低消息吞吐量。

您还需要确保错误得到处理、重试并在失败时正确传播回调用业务流程。我遇到了一个解决方案,开发人员出于某种原因决定使用外部 class 调用 Web 服务。每隔一段时间,这个 Web 服务就会抛出一个错误,但是 class 只会将错误消息传递回 Orchestration,就好像它是一个有效的响应消息一样。这会导致稍后在 Orchestration 中尝试使用该消息但它与预期消息不匹配时出现故障。当我获得分配的预算时,我用正确配置的发送端口替换了这个 class,当它遇到 Web 服务错误时也会自动重试消息,然后成功处理。