TransactionScope 是如何工作的?
Posted
技术标签:
【中文标题】TransactionScope 是如何工作的?【英文标题】:How does TransactionScope work? 【发布时间】:2011-03-25 23:24:39 【问题描述】:当Method1()
实例化TransactionScope
并调用同样实例化TransactionScope
的Method2()
,.NET 如何知道两者在同一个范围内?
我相信它不会在内部使用静态方法,否则它不会在 ASP.NET 等多线程应用程序上运行良好。
是否可以创建我自己的类似 TransactionScope 的类,或者原始类是否使用 Microsoft 知道它们如何工作的特殊功能?
【问题讨论】:
有点跑题了,所以评论一下:静态方法对多线程来说没什么大不了的,你需要担心的是静态数据 【参考方案1】:希望这会有所帮助:
http://msdn.microsoft.com/en-us/magazine/cc300805.aspx
对于那些不熟悉 TransactionScope 的人,它是 Microsoft® .NET 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 是如何工作的?的主要内容,如果未能解决你的问题,请参考以下文章