TransactionScope:它变得更好了吗?

时间:2009-07-20 21:03:11

标签: .net asp.net transactions transactionscope

当TransactionScope首次出现时,我遇到了一些严重的问题,让它在我的开发机器(XP)和我们的数据库服务器(Windows Server 2003)之间工作。

当我更多地研究它时,这似乎是一个棘手而广泛的问题,有可能成为生产中的头疼,所以我决定不以这种方式处理事务(即使我喜欢语法很多而且我真的希望它能起作用。)

这些问题是否仍然存在或使用安全?你现在经常使用它没有问题吗?

非常感谢!

注意:现在已经很久了,但我认为这个问题与Distribute Transaction Coordinator有关。我花了很长时间摆弄它,却从来没能让它发挥作用。

3 个答案:

答案 0 :(得分:8)

Rick Strahl有一篇关于事务范围和LINQ to SQL here的文章。它的上下文更多是LINQ to SQL,但我认为有一些适用的原则可以帮助您解决问题。

编辑:更具体地回答你的问题,这是Strahl对TransactionScope的看法:

  

传统上,TransactionScope是分布式事务处理协调器(DTC)的.NET包装器,但它的功能有所扩展。一个问题是DTC在资源使用方面相当昂贵,并且它要求DTC服务实际上在机器上运行(另一种服务在客户端安装上尤其麻烦)。

     

但是,最近对TransactionScope和SQL Server客户端驱动程序的更新使得可以使用TransactionScope类及其提供的易用性,而无需DTC,只要您针对单个数据库运行并使用单个一致的连接字符串< / p>

答案 1 :(得分: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分布式事务处理协调器(MSDTC)服务。” New functionality in the Distributed Transaction Coordinator service in Windows Server 2003 Service Pack 1 and in Windows XP Service Pack 2

Juval Lowy关于System.Transactions的白皮书: Introducing System.Transactions in the Microsoft .NET Framework version 2.0

答案 2 :(得分:1)

还有关于TransactionScope的问题。在我目前的项目中,我们不定期地遇到“无法在分布式事务中登记”异常和TransactionInDoubtException。这两个例外都与TransactionScope有关。两种异常的一种解决方法是使用单个oracle连接(当然,如果适用)。 请阅读以下内容:Avoid unwanted Escalation to Distributed Transactions

有关效果影响的信息,请阅读我的帖子:Performance impact using TransactionScope