TransactionScope 是如何工作的?

Posted

技术标签:

【中文标题】TransactionScope 是如何工作的?【英文标题】:How does TransactionScope work? 【发布时间】:2011-03-25 23:24:39 【问题描述】:

Method1() 实例化TransactionScope 并调用同样实例化TransactionScopeMethod2(),.NET 如何知道两者在同一个范围内? 我相信它不会在内部使用静态方法,否则它不会在 ASP.NET 等多线程应用程序上运行良好。

是否可以创建我自己的类似 TransactionScope 的类,或者原始类是否使用 Microsoft 知道它们如何工作的特殊功能?

【问题讨论】:

有点跑题了,所以评论一下:静态方法对多线程来说没什么大不了的,你需要担心的是静态数据 【参考方案1】:

希望这会有所帮助:

http://msdn.microsoft.com/en-us/magazine/cc300805.aspx

对于那些不熟悉 TransactionScope 的人,它是 Microsoft® .NE​​T Framework 2.0 新增的 System.Transactions 命名空间的一部分。 System.Transactions 提供了一个完全集成到 .NET Framework 中的事务框架,包括但不限于 ADO.NET。 Transaction 和 TransactionScope 类是这个命名空间中最重要的两个类。正如问题所暗示的,您可以创建一个 TransactionScope 实例,并且在该 TransactionScope 范围内执行的 ADO.NET 操作将自动登记(您也可以通过 Transaction.Current 静态属性访问当前 Transaction):

using(TransactionScope scope = new TransactionScope())

    ... // all operations here part of a transaction
    scope.Complete();

【讨论】:

当然!他们也可以使用 Thread.SetData():msdn.microsoft.com/query/… @MiklX:这真的很糟糕,试试full September 2006 问题。稍后我会仔细研究。【参考方案2】:

TransactionScope 几乎建立在 COM 之上 - 特别是在 MSDTC 之上。

这协调事务,并允许事务嵌套。

简而言之,当您第一次调用 TransactionScope 时,一个事务会注册到 MSDTC,就像所有其他对 TransactionScope 的调用一样。 MSDTC 协调所有这些。

【讨论】:

有时事务(特别是数据库事务)会升级为 DTC,但并非总是如此。 @Eduardo - 这是真的。 LTM(轻量级事务管理器可以促进事务通过 MSDTC 分发)。

以上是关于TransactionScope 是如何工作的?的主要内容,如果未能解决你的问题,请参考以下文章

TransactionScope:避免分布式事务

如何加入 TransactionScope?

TransactionScope 如何回滚事务?

C#分布式事务解决方案-TransactionScope

如何在多实例应用程序上处理 TransactionScope?

如果在提交时抛出异常,C# TransactionScope 会回滚吗?