2

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

4

2 回答 2

1

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

DTC 也非常糟糕地将系统的某些部分耦合在一起。涉及到各种耦合:空间、时间、甚至平台(因为每个人都必须知道如何加入特定的 DTC)。

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

在某些情况下,系统中某些罕见的特定情况需要 DTC ,但是如果您发现自己处于将交易和 DTC 视为神圣金锤的情况(我们只是开始交易,如果某些事情失败,我们“只是”回滚一切)我建议你现在停止。如果您停在这里,您将节省大量时间、错误、神经、金钱和资源。

我相信做一个不需要 DTC 的适当设计会更合乎逻辑,更好。记住:业务不会回滚。我们有,程序员。当资金从一个账户转移到另一个账户时(可能在不同的银行),不涉及 DTC,这将是疯狂的。他们不回滚,他们补偿。有一些模式和方法可以正确地做到这一点,我们不能仅仅将整个世界包装在一个事务中。

因此,针对可以自主运行并自然地相互通信的独立上下文设计您的系统,您会发现自己处于一个更好的世界:)

于 2013-12-05T11:01:57.667 回答
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 服务,它可以完成这项工作。如果是我,我会再次将它用于新项目,除非有非常具体的理由不这样做。

于 2013-12-02T12:19:40.337 回答