当您直接写入第三方数据库(尤其是您无法控制的数据库)时,您将集成解决方案与该外部系统紧密耦合。第三方合作伙伴或供应商不会在设计数据库时考虑到您,并且不会在意何时更改其数据库并破坏您的集成。
如果除了直接与其数据库交互之外,您绝对找不到其他方式在第三方应用程序中存储/检索数据,那么您必须考虑如何以最大限度地减少耦合的方式进行操作。让您自己的订单输入系统直接与第三方应用程序的数据库对话当然是最糟糕的选择。
BizTalk 使得在各种消息格式之间进行翻译变得相当容易。如果您只在自己的订单输入系统和单个订单管理系统之间进行映射,那么 BizTalk 对您来说可能是一个过于繁重的解决方案。只需将您自己的接收应用程序写入第三方应用程序数据库的站点即可。
但是,如果您需要从订单输入系统转换到无数订单管理系统,每个系统都有自己独特的架构,那么 BizTalk 可能适合您,因为它具有成熟的数据转换映射 工具。
在 BizTalk 之上公开 Web 服务,只是为了给您的订单输入系统提供一种与 BizTalk 通信的方式,也可能不是最佳选择。BizTalk 使用它的适配器支持许多通信协议,并且 SOAP 或 WCF Web 服务可能相当健谈,并且在发送者尝试发送消息时要求接收系统在线。对于同一网络上的系统,MSMQ通常更有意义,因为它支持异步、事务性消息传递并且随 Windows 免费提供。
正如本白皮书所说:
从客户管理到订单管理下订单的关键要求是保证交付,因此我们可能会使用一些排队技术(例如 IBM MQSeries 或 MSMQ)来交付消息,其中以性能换取更高级别的可靠性。
掌握MSMQ 的工作原理以及其中的一些陷阱非常重要:
...因此请花时间了解解决方案中的所有内容如何协同工作,即使您发现让 .NET 应用程序通过 MSMQ 发送消息相当简单。
如果您仍想从 BizTalk 公开 Web 服务,请注意不要通过将发送和接收系统硬编码到单个编排中而无意中将所有内容耦合在一起。这里有一些重要的
如果您遵循上述建议,那么使用WCF SQL 适配器写入第三方 SQL 数据库并不算太糟糕,因为您将入站消息及其处理与出站 SQL 操作分离。当合作伙伴/供应商确实更新其数据库架构以破坏您的集成时,只需部署一个新架构、更新您的 BizTalk 映射并重新部署。隔离此类更改的影响意味着您只需重新测试从规范模式到外部数据库模式的转换(可能需要进行将数据保存到数据库中的集成测试)。
使用 WCF SQL 适配器执行CRUD 操作非常简单。如果供应商确实提供了 API,那么换出不同的 BizTalk 适配器来处理通信协议,更新您的架构/映射,并且您的订单发起系统永远不需要知道其中的区别。