WCF 分布式事务的事务协调器
本文关键字:事务 协调 WCF 分布式 | 更新日期: 2023-09-27 18:33:09
我知道事务协调器用于协调不同类型的资源之间的事务,例如 1(SQL Server 2(Oracle 3(MSMQ 4(文件系统等,他们有责任跟踪事务,如果任何这些资源的事务失败,则应回滚WCF中所有其他资源的事务。
我想知道a( 选择哪个交易协调器以及原因b( 我们可以自己选择事务协调器,还是由 wcf 自己自动完成对于以下条件:-
1(如果 wcf 将事务用于相同的Microsoft技术(Microsoft SQL Server 和 Microsoft Message Queue(
2(如果 wcf 将事务用于不同的数据库技术(Microsoft SQL Server、Oracle 和 MySQL(
3(如果 wcf 使用事务处理具有不同技术(Microsoft SQL Server、Oracle、文件系统等(的所有不同类型的资源
我强烈建议不要在这种异构环境中使用 DTC。涉及多种风险。其中只有一个限制了您未来的选择:如果您必须使用无法将其登记为事务的文件系统(例如,网络文件共享(,该怎么办?还是云前端?还是一些第三方服务?
此外,DTC 将系统的某些部分非常糟糕地耦合在一起。涉及各种耦合:空间,时间,甚至平台(因为每个人都必须知道如何加入特定的DTC(。
尽管性能(使用 DTC 比不使用 DTC 最差数千倍(方面,DTC 在它不工作之前工作得很好。如果您使用 DTC,您应该准备好"交易有疑问"的情况和各种故障排除。它应该是你设计的一部分。
在某些情况下,系统中一些罕见的特定情况需要DTC,但是如果您发现自己处于将事务和DTC视为神圣金锤的情况(我们只是开始事务,如果某些事情失败,我们"只是"回滚所有内容(我建议您立即停止。如果您停在这里,您将节省大量时间、错误、神经、金钱和资源。
我相信做出不需要DTC的适当设计会更合乎逻辑,也更好。请记住:业务不会回滚。我们这样做,程序员。当资金从一个账户转移到另一个账户(可能在不同的银行(时,不涉及DTC,这将是疯狂的。它们不会回滚,而是进行补偿。有一些模式和方法可以正确地做到这一点,我们不能只是将整个世界包装在一个事务中。
因此,针对可以自主运行并自然相互通信的独立环境设计您的系统,您会发现自己处于一个更美好的世界:)
我想说,如果您在Windows服务器上运行应用程序,那么DTC女士将是最自然的选择,因为它已经是操作系统的一部分,已经作为本机Windows服务。 http://blogs.msdn.com/b/florinlazar/archive/2004/03/04/what-is-msdtc-and-why-do-i-need-to-care-about-it.aspx
我以前在自定义软件项目中将其用于 WCF 服务,它可以完成这项工作。如果是我,我会再次将其用于新项目,除非有非常具体的原因不这样做。