我有一个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();
}
在我的开发者身上。框,服务器和客户端进程在同一台机器上,它工作正常。但是当我部署到QA env时,服务器和客户端在不同的机器上,每当调用scope.Complete()
时,客户端会挂起超时(2分钟)然后我得到:
流动的交易无法解开。下列 发生异常:与底层事务管理器通信 失败了。
导致这种情况的原因是什么?
答案 0 :(得分:9)
我今天花了几个小时试图在Windows 7下解决这个问题。最后它起作用了,这就是我做的:
这可能不是最好的解决方案,但实际上是我唯一能解决的问题。
编辑:在Windows 7 SP1下MSDTC的另一个问题之后,我发现为了使其工作,您需要做两件事。
答案 1 :(得分:1)
作为MSDTC的进一步说明,请参阅MSDTC的“安全配置”选项卡在服务器上设置的内容,并确保本地计算机与此匹配。我遇到了一个困扰我一段时间的问题,直到我这样做了,发现服务器没有进行身份验证,但我的本地机器设置为相互身份验证。
答案 2 :(得分:1)
我有类似的问题,当管理员将 MaxUserPort
注册表项值设置为65534时,它已得到解决。[问题仅发生在群集服务器设置中]
<强>参考强>
其他参考资料
答案 3 :(得分:0)
您应该在DTC配置中为分布式事务启用网络事务和其他设置。
检查一下,标有绿色图标的答案会告诉您详细说明:
"Communication with the underlying transaction manager has failed" error message