0

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 事务范围问题线程,它指导我如何启用网络 DTC 访问

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

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

4

1 回答 1

0

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

于 2012-08-02T01:28:51.960 回答