wcf分布式事务的事务协调器

时间:2013-09-29 13:03:23

标签: c# wcf transactions distributed-transactions

我知道事务协调器用于协调不同类型资源之间的事务,例如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,文件系统等)。

2 个答案:

答案 0 :(得分:1)

我强烈建议不要在这样的异构环境中使用DTC。涉及多种风险。其中只有一个限制了您未来的选择:如果您必须使用无法将其作为交易的文件系统(例如,网络文件共享),该怎么办?还是云前端?还是一些第三方服务?

DTC也将系统的各个部分组合在一起非常糟糕。涉及各种耦合:空间,时间,甚至平台(因为每个人必须知道如何在特定的DTC中登记)。

尽管性能(对于DTC而言是数千次次,而不是没有)方面,DTC工作得很好,直到它没有。如果您使用DTC,您应该准备好“交易有疑问”的情况和各种故障排除。它应该是你设计的一部分。

有些情况下,系统中某些罕见的特定情况需要使用DTC ,但如果您发现自己处于交易和DTC处于神圣金锤的情况下(我们刚刚开始)交易,如果出现问题我们“只是”回滚所有内容)我建议你立即停止。如果你来这里,你将节省大量的时间,错误,神经,金钱和资源。

我认为制作一个不需要DTC的正确设计会更合乎逻辑,也更好。请记住:业务不会回滚。我们这样做,程序员。当钱从一个账户转移到另一个账户(可能在不同的银行)时,没有涉及DTC,这将是疯狂的。他们不回滚,他们补偿。 有正确的模式和方法,我们不能将整个世界包裹在交易中。

因此,针对可以自主运作并自然地相互沟通的独立环境设计您的系统,您将发现自己处于一个更美好的世界:)

答案 1 :(得分:0)

我会说如果你在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服务并且它完成了这项工作。如果是我,我会再次使用它来进行一个新项目,除非有一个非常具体的理由不这样做。