分布式事务的行为不一致(MSDTC异常)

时间:2016-03-07 15:20:59

标签: c# entity-framework sql-server-2008 distributed-transactions

你可能以前曾经问过这个问题,但请先听我说。

我有一个跨越不同服务器运行远程连接的项目。 在开发服务器上,所有测试都通过。

在具有相同配置的QA服务器中,大多数测试通过但是一对失败,例外是

  

底层提供程序在Open上失败。

内部异常:

  

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

内心异常:

The transaction manager has disabled its support for remote/network transactions. 
(Exception from HRESULT: 0x8004D024)

据我所知,配置是正确的,实际上通过的测试运行完全相同的代码没有问题,因此没有与MSDTC相关的配置问题。

导致此问题的代码片段是一个实体框架连接,它将一个简单的行添加到数据库表中:

using (var inbound = new InBound.InBound())
{
    var now = DateTime.Now;
    var inMessage = inbound.InMessages.Create();
    inMessage.Content = message.ToXmlFormattedString();
    inMessage.Created = now;
    inMessage.SerializedVersion = version;
    inMessage.Updated = now;
    inbound.InMessages.Add(inMessage);
    inbound.SaveChanges(); //Exception here
 }

这段代码在某些测试中起作用,但在其他一些测试中失败了。 此问题仅发生在QA环境中。所有与MSDTC相关的配置都已经过检查并且显示正确。 DEV环境具有相同的配置,并且不会发生此错误。

环境完全相同。 Microsoft Server 2012 R2,MS SQL Server 2008,相同的代码库,相同的设置。

消息中的xml在失败的测试和通过的测试中都是相同的。

我已经用尽了我可以寻找解决方案的地方列表,而且似乎没有合理的解释。

有什么想法吗?

更新

如果我在连接字符串中添加“Enlist = false”,则测试再次通过。 但是我确实得到了一个被淹死的内部异常,那就是:

  

无法登记交易,因为本地交易在   连接的进展。完成本地事务并重试。

所以连接必须以某种方式打开,即使在调试期间数据库的状态是“关闭”。

0 个答案:

没有答案