MSDTC:与底层事务管理器的通信失败

Joe*_*Fan 5 .net c# wcf msdtc

我有一个WinForms/WCF/SQLServer应用程序,我试图使用这样的MSDTC事务:

using System.Transactions;

// ...

var transOptions =
    new TransactionOptions
    {
        IsolationLevel = IsolationLevel.ReadCommitted,
        Timeout = TimeSpan.FromSeconds(120)
    };

using (var scope = new TransactionScope(TransactionScopeOption.Required,
         transOptions))
{
    // ...

    if (everything_is_ok)
        scope.Complete();
}
Run Code Online (Sandbox Code Playgroud)

在我的开发.框,服务器和客户端进程在同一台机器上,它工作正常.但是当我部署到QA环境中,服务器和客户端在不同的机器上时,无论何时scope.Complete()调用,客户端都会挂起超时(2分钟),然后我得到:

流动的交易无法解开.发生以下异常:与基础事务管理器的通信失败.

是什么导致这个?

Kon*_*rad 9

今天我花了几个小时试图在Windows 7下解决这个问题.最后它起作用了,这就是我做的:

  1. 启用MSDTC并允许入站/出站事务(通过控制面板)
  2. 通过注册表打开端口的指南 - 只需按照指南
  3. 允许在防火墙中打开(2)中定义的端口(如果您使用的话)
  4. 允许MSDTC通过Windows防火墙 - 为msdtc.exe的入站连接添加新规则(应该在%systemroot%\ system32中)

这可能不是最好的解决方案,但实际上是唯一一个适用于我的情况.

编辑:在Windows 7 SP1下与MSDTC的另一个问题后,我发现有两件事需要做才能使它工作.

  1. 添加到hosts文件服务器的IP和NetBIOS名称之间的映射.
  2. 在HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\RPC中添加(或编辑)两个键:"RestrictRemoteClients"= dword:00000000"EnableAuthEpResolution"= dword:00000000


Dav*_*ras 0

您应该在 DTC 配置中启用网络事务和分布式事务的其他设置。

看看这个,标有绿色图标的答案会详细告诉您该怎么做:

“与底层事务管理器的通信失败”错误消息