据我所读,在.NET中使用TransactionScope,需要Windows的分布式事务协调器服务处于运行状态。我已经关闭了该服务,但我的应用程序似乎仍在运行,并且可以轻松回滚事务。
我是否遗漏了什么?它是如何正常工作的?我正在Windows 7上运行,并从Visual Studio 2010运行Web应用程序。
据我所读,在.NET中使用TransactionScope,需要Windows的分布式事务协调器服务处于运行状态。我已经关闭了该服务,但我的应用程序似乎仍在运行,并且可以轻松回滚事务。
我是否遗漏了什么?它是如何正常工作的?我正在Windows 7上运行,并从Visual Studio 2010运行Web应用程序。
现代版本的Windows在内核中有一个小型的DTC版本。它没有分发,但使用相同的API——但它只能处理每个事务范围中的一个资源。
TransactionScope在开始时使用它,然后“升级”到真正的DTC,一旦添加第二个资源(在您的情况下,资源是数据库连接)。因此,只要您的用例简单,就可以避免DTC分布式部分的(高)开销,并且可以在没有运行服务的情况下工作。
有关内核事务管理器的更多信息,请访问http://en.wikipedia.org/wiki/Kernel_Transaction_Manager
Microsoft还添加了它,因为NTFS变成了事务性的,需要确保DTC可用。
只有在您具有不同连接的多个事务时,MSDTC才会发挥作用。
因此,答案是:
这取决于情况!