我在单元测试中使用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服务器时,已经检查了远程访问复选框。其他人还有其他想法吗?
更多细节......当我强制Repository保持同一个连接,而不是为了第二个Sql语句而返回到另一个连接池时,它可以工作。显然,对第二个sql语句使用不同的连接是触发DTC将事务升级为“分布式模式”(它不应该,因为两个sql语句在同一服务器上,并使用完全相同的连接字符串), 更何况,即使它确实如此,(分布式模式)仍然应该工作。
答案 0 :(得分:0)
如果您的DTC服务已运行,请单击安全配置,然后在安全设置区域中选中“网络DTC访问”。见图像波纹管。