【问题标题】:Does TransactionScope Need DTC Service on?TransactionScope 是否需要开启 DTC 服务?
【发布时间】:2012-01-31 05:58:22
【问题描述】:

根据我的阅读,为了在 .NET 中使用 TransactionScope,您需要运行 Windows 中的分布式事务协调器服务。我已关闭了该服务,我的应用程序似乎运行相同并且回滚事务没有问题。

我错过了什么吗? 它是如何工作的?我正在运行 Windows 7 并在 VisualStudio 2010 之外运行 webapp。

【问题讨论】:

  • 据我所知,当您的交易需要跨越某些界限时,DTC 是必需的。例如,我相信您需要它来处理本地机器上的两个数据库之间的事务,或者将事务升级到远程服务器。我没有确凿的证据/链接,所以我将把它作为评论留给你调查,而不是作为答案。希望对您有所帮助。

标签: asp.net sql-server transactions transactionscope msdtc


【解决方案1】:

更现代的 Windows 版本在内核中有一个迷你 DTC 版本。它不是分布式的,而是使用相同的 API - 但每个事务范围只能处理一个资源。

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

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

MS 添加它也是因为 NTFS 具有事务性,它需要确保 DTC 可用。

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

【讨论】:

    【解决方案2】:

    只有当你有多个不同连接的交易时,MSDTC 才会发挥作用

    所以,答案是:

    这取决于!

    • 如果您每 1 个连接使用 1 个 TranScope - 则否
    • 如果您为超过 1 个连接使用 1 个 TranScope - 那么是
    • 如果您创建了需要分布式事务的 TransactionScope 对象 - 那么是

    【讨论】:

    • 真的吗?如果您清楚地说明,比在一个 TranScope 中您使用多个连接,那么我会更新答案,否则 - 看起来您每个事务范围使用 1 个连接 - 这种情况不涉及 MSDTC
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-02
    • 2013-10-16
    • 1970-01-01
    • 2012-02-27
    相关资源
    最近更新 更多