TransactionScope:它变得更好了吗?

5
当 TransactionScope 首次推出时,我遇到了一些在我的开发机(XP)和我们的数据库服务器(Windows Server 2003)之间无法正常工作的严重问题。
当我进一步调查时,这似乎是一个棘手而普遍的问题,在生产中可能会成为头痛问题,因此我决定不以这种方式处理事务(尽管我非常喜欢语法并且我真的想让它起作用)。
这些问题现在是否仍然存在或者可以安全使用?你现在经常使用它而没有问题吗?
非常感谢!
注意:虽然现在已经过去很长时间,但我认为该问题与分布式事务协调器有关。 我花费了很长时间来尝试解决它,但从未能够使其工作。
3个回答

8
Rick Strahl在这篇文章中详细介绍了事务范围和LINQ to SQL的相关内容,文章链接在这里。虽然主要是讲解LINQ to SQL,但其中涉及到一些通用原则,可以帮助您解决问题。
编辑:更具体地回答您的问题,以下是Strahl关于TransactionScope的观点:
传统上,TransactionScope是.NET对Distributed Transaction Coordinator(DTC)的封装,但它的功能已经有所扩展。其中一个问题是,DTC在资源使用方面相当昂贵,并且需要在机器上实际运行DTC服务(这又是一个在客户端安装时特别麻烦的服务)。
不过,最近对TransactionScope和SQL Server客户端驱动程序的更新使得在只使用单个数据库和一致的连接字符串的情况下,可以使用TransactionScope类及其提供的易用性,而无需使用DTC。

1

我已经使用TransactionScope一年多了,没有任何问题。然而,这是一个内部应用程序,用户数量非常少。此外,数据库和应用程序都驻留在同一台服务器上。

以下是有关TransactionScope以及查找更多信息的一些信息:每当创建TransactionScope对象时,它会启动轻量级事务。只要您使用支持轻量级事务的单个连接/资源,事务将由资源管理器处理,消耗尽可能少的资源,并具有非常好的性能。当在事务范围内添加第二个连接/资源时,事务管理器将自动升级为OleTx事务管理器,通过使用COM+ DTC技术处理分布式事务。这也会发生在到不支持轻量级事务的资源管理器的单个连接(如SQL Server 7/2000、Oracle和其他RDBMS)。

以下是两个可帮助您的资源:

“Microsoft Windows Server 2003 Service Pack 1 (SP1)和Microsoft Windows XP Service Pack 2 (SP2)包含许多与安全相关的更新和更改。其中一些更改会影响Microsoft Distributed Transaction Coordinator(MSDTC)服务。” Windows Server 2003 Service Pack 1和Windows XP Service Pack 2中分布式事务协调器服务的新功能

以及

Juval Lowy关于System.Transactions的白皮书: 在Microsoft .NET Framework版本2.0中介绍System.Transactions


1

关于TransactionScope仍存在问题。在我的当前项目中,我们不定期遇到“无法加入分布式事务”异常和TransactionInDoubtException异常。两个异常都与TransactionScope相关。对于这两个异常的解决方法是使用单个Oracle连接(如果适用的话)。 阅读:避免不必要的升级到分布式事务以了解更多信息。

有关性能影响的信息,请阅读我的帖子:使用TransactionScope时的性能影响


+1:但是要明确一下,你在这里使用的是Oracle,对吧?我想知道这是否特定于Oracle。 - Brian MacKay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接