我有一个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分钟),然后我得到:
流动的交易无法解开.发生以下异常:与基础事务管理器的通信失败.
是什么导致这个?
今天我花了几个小时试图在Windows 7下解决这个问题.最后它起作用了,这就是我做的:
这可能不是最好的解决方案,但实际上是唯一一个适用于我的情况.
编辑:在Windows 7 SP1下与MSDTC的另一个问题后,我发现有两件事需要做才能使它工作.