事务范围(TransactionScope)需要开启DTC服务吗?

10

据我所读,在.NET中使用TransactionScope,需要Windows的分布式事务协调器服务处于运行状态。我已经关闭了该服务,但我的应用程序似乎仍在运行,并且可以轻松回滚事务。

我是否遗漏了什么?它是如何正常工作的?我正在Windows 7上运行,并从Visual Studio 2010运行Web应用程序。


1
据我所知,当您的事务需要跨越某些边界时,需要使用DTC。例如,我认为在本地机器上跨越两个数据库的事务或将您的事务升级到远程服务器时,需要使用它。我没有确凿的证据/链接,所以我会把这留作评论供您调查,而不是作为答案。希望能有所帮助。 - Smudge202
2个回答

11

现代版本的Windows在内核中有一个小型的DTC版本。它没有分发,但使用相同的API——但它只能处理每个事务范围中的一个资源。

TransactionScope在开始时使用它,然后“升级”到真正的DTC,一旦添加第二个资源(在您的情况下,资源是数据库连接)。因此,只要您的用例简单,就可以避免DTC分布式部分的(高)开销,并且可以在没有运行服务的情况下工作。

有关内核事务管理器的更多信息,请访问http://en.wikipedia.org/wiki/Kernel_Transaction_Manager

Microsoft还添加了它,因为NTFS变成了事务性的,需要确保DTC可用。

http://www.codeguru.com/cpp/article.php/c18309/


9

只有在您具有不同连接的多个事务时,MSDTC才会发挥作用。

因此,答案是:

这取决于情况!

  • 如果您每个连接使用1个TranScope-那么不需要
  • 如果您每个连接使用1个以上的TranScope-那么需要
  • 如果您创建了需要分布式事务的TransactionScope对象-那么需要

1
真的吗?如果您明确说明,在一个 TranScope 中使用多个连接,那么我会更新答案,否则 - 看起来您每个事务范围使用1个连接 - 这种情况不涉及 MSDTC。 - Oleg Dok

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接