【问题标题】:Network access disabled in MSDTC在 MSDTC 中禁用网络访问
【发布时间】:2010-12-14 17:49:06
【问题描述】:

我在单元测试中使用System.Transactions.TransactionScope() 插入一条记录,尝试读取它,并让事务范围回滚,以便在数据库中不留下任何足迹。

1  var rep = new RunRepository();
2  using (var scop = new TransactionScope())
3  {
4     var runId = rep.SaveSwrsRun([Run data elements]); // returns PK RunId
5     var run = rep.FetchSwrsRun(runId);  // returns an object of type Run
6     Assert.IsNotNull(run);
7  }

第 5 行抛出异常,并带有错误消息

System.Transactions.TransactionManagerCommunicationException:分布式事务管理器 (MSDTC) 的网络访问已被禁用。请使用组件服务管理工具在 MSDTC 的安全配置中启用 DTC 以进行网络访问。

我检查了组件服务管理工具,并且我的工作站确实启用了 DTC。我还发现了这个MSDTC Transaction scope problems 线程,它将我定向到How to enable Network DTC Access

但是当我检查 SQL 服务器时,远程访问复选框已经被选中。还有其他人有其他想法吗?

更多详细信息...当我强制存储库保持相同的连接,而不是为第二个 Sql 语句返回池以获取另一个连接时,它可以工作。显然,对第二个 sql 语句使用不同的连接会触发 DTC 将事务升级为“分布式模式”(它不应该这样做,因为两个 sql 语句都在同一台服务器上,并且使用完全相同的连接字符串), 更不用说即使这样做了,那个(分布式模式)仍然应该工作。

【问题讨论】:

  • 除了启用网络 DTC 访问之外,其余设置(在两台服务器上)都按照如何启用网络 DTC 访问?例如允许入站、允许出站等
  • 是的,Inbound 和 Outbound 复选框都已选中...一切正常...
  • 您使用的是 SQL Server 2005 或更高版本吗?如果是这样,那么,正如您所说,您不应该看到交易升级。存储库是否可能在保存后没有关闭连接?
  • 对于 DTC 问题,我会尝试 DTCPing (download.microsoft.com/download/d/0/0/…) 看看它是否可以提供任何其他信息。我不确定它是否会有所帮助,因为当消息更神秘时,它通常最有用。请参阅blogs.msdn.com/b/distributedservices/archive/2008/11/12/… 了解一下。
  • 使用 sql 2008,如上所述,如果我使用相同的连接,问题就会消失,所以似乎发生的事情是即使连接字符串相同,如果您在不同的服务器上运行两个查询连接时,事务会自动升级,(我认为这不应该发生!)第二个问题是升级事务失败的原因(某处的网络 MSDTC 连接问题......)

标签: ado.net transactionscope msdtc


【解决方案1】:

如果您的 DTC 服务已运行,请单击安全配置并在安全设置区域中选中“网络 DTC 访问”。见下图。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 2018-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多