我有一个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环境时,服务器和客户端位于单独的计算机上,每当调用scope.Complete()时,客户端就会挂起超时时间(2分钟),然后得到:



是什么原因造成的?

最佳答案

我今天花了几个小时试图解决Windows 7下的这个问题。终于成功了,这是我所做的:

  • 启用MSDTC并允许入站/出站事务(通过控制面板)
  • The guide for opening ports via registry-遵循指南
  • 允许在防火墙中打开(2)中定义的端口(如果使用一个端口)
  • 允许MSDTC通过Windows防火墙-为msdtc.exe的入站连接添加新规则(应在%systemroot%\system32中)

  • 这也许不是最好的解决方案,但实际上是唯一对我而言有效的解决方案。

    编辑:在Windows 7 SP1下MSDTC出现另一个问题后,我发现需要做两件事才能使其正常工作。
  • 将IP地址和NetBIOS名称之间的映射添加到主机文件。
    服务器。
  • 在HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\RPC中添加(或编辑)两个键:
    “RestrictRemoteClients” = dword:00000000
    “EnableAuthEpResolution” = dword:00000000
  • 10-04 15:07