当我进一步调查时,这似乎是一个棘手而普遍的问题,在生产中可能会成为头痛问题,因此我决定不以这种方式处理事务(尽管我非常喜欢语法并且我真的想让它起作用)。
这些问题现在是否仍然存在或者可以安全使用?你现在经常使用它而没有问题吗?
非常感谢!
注意:虽然现在已经过去很长时间,但我认为该问题与分布式事务协调器有关。 我花费了很长时间来尝试解决它,但从未能够使其工作。
我已经使用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
关于TransactionScope仍存在问题。在我的当前项目中,我们不定期遇到“无法加入分布式事务”异常和TransactionInDoubtException异常。两个异常都与TransactionScope相关。对于这两个异常的解决方法是使用单个Oracle连接(如果适用的话)。 阅读:避免不必要的升级到分布式事务以了解更多信息。
有关性能影响的信息,请阅读我的帖子:使用TransactionScope时的性能影响