Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net TransactionScope是否需要上的DTC服务?_Asp.net_Sql Server_Transactions_Transactionscope_Msdtc - Fatal编程技术网

Asp.net TransactionScope是否需要上的DTC服务?

Asp.net TransactionScope是否需要上的DTC服务?,asp.net,sql-server,transactions,transactionscope,msdtc,Asp.net,Sql Server,Transactions,Transactionscope,Msdtc,据我所知,为了在.NET中使用TransactionScope,您需要运行Windows中的分布式事务协调器服务。我已经关闭了该服务,我的应用程序似乎也在运行相同的服务,并且回滚事务没有问题 我错过什么了吗它是如何工作的?我正在运行Windows 7并在VisualStudio 2010上运行webapp。只有当您有多个具有不同连接的事务时,MSDTC才会起作用 因此,答案是: 这要看情况了 如果每1个连接使用1个TranScope-则否 如果您对多个连接使用1个TranScope,则是 如果

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


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

只有当您有多个具有不同连接的事务时,MSDTC才会起作用

因此,答案是:

这要看情况了

  • 如果每1个连接使用1个TranScope-则否
  • 如果您对多个连接使用1个TranScope,则是
  • 如果您创建了需要分布式事务的TransactionScope对象,则为“是”

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

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

      有关内核事务管理器的更多信息,请访问

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


      据我所知,当您的交易需要跨越某些边界时,需要DTC。例如,我认为在本地计算机上跨两个数据库的事务中,或者在将事务升级到远程服务器时,需要它。我没有确凿的证据/链接,所以我将把它作为一个评论留给你调查,而不是作为一个答案。希望有帮助,真的吗?如果您清楚地说明,在一个TranScope中您使用了多个连接,那么我将更新答案,否则-看起来每个事务作用域使用一个连接-此场景不涉及MSDTC