我在单元测试中使用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的安全配置中启用用于网络访问的DTC。
我已经检查了组件服务管理工具,我的工作站确实启用了DTC。我还发现了这个MSDTC事务范围问题线程,它将我引导到如何启用网络DTC访问
但是,当我选中SQL服务器时,已经选中了远程访问复选框。还有其他人有其他想法吗?
更多细节..。当我强制Repository保持相同的连接,而不返回池为第二个Sql语句返回池时,它可以工作。显然,对第二个sql语句使用不同的连接会触发DTC将事务升级到“分布式模式”(它不应该这样做,因为两个sql语句都在同一台服务器上,并且使用完全相同的连接字符串),更不用说,即使使用了,该(分布式模式)仍然应该工作。
发布于 2012-08-02 01:28:51
如果您的DTC服务已运行,请单击“安全配置”,并在“安全设置区域”上检查“网络DTC访问”。如图所示。

https://stackoverflow.com/questions/4442343
复制相似问题