2011-09-01 131 views
4

我有,我想使用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(); 
} 

在我的dev。盒,服務器和客戶端進程在同一臺機器上,它工作正常。但是,當我部署到QA ENV,其中服務器和客戶機在不同的機器上,每當scope.Complete()被調用時,客戶端掛起超時週期(2分鐘),然後我得到:

的流動的事務不能解組。發生以下 異常:與基礎事務管理器 的通信失敗。

這是什麼原因造成的?

回答

8

我今天花了幾個小時,試圖最後,它成功地解決了在Windows 7這個問題,這裏就是我所做的:

  1. 啓用MSDTC,並允許呼入/呼出的交易(通過控制面板)
  2. The guide for opening ports via registry - 只要遵循的指導
  3. 允許在(2)中定義的端口在防火牆中打開(如果使用的話)
  4. 允許MSDTC通過Windows防火牆 - 爲入站連接添加新規則到msdtc.exe(應該位於%systemroot% \ system32)

這可能不是最好的解決方案,但實際上是唯一一個適用於我的案例。

編輯:在Windows 7 SP1下MSDTC的另一個問題後,我發現有兩件事你需要做,以使其工作。

  1. 向主機添加 服務器的IP和NetBIOS名稱之間的映射文件。
  2. 添加(或編輯)在HKEY_LOCAL_MACHINE \ SOFTWARE \政策兩個鍵\微軟\的Windows NT \ RPC: 「RestrictRemoteClients的」= DWORD:00000000 「了EnableAuthEpResolution」= DWORD:00000000
1

作爲進一步的說明在MSDTC上,查看在服務器上MSDTC的安全配置選項卡已設置,並確保您的本地計算機匹配。我遇到了一個難題,一直困擾着我一段時間,直到我做到了這一點,並發現服務器期望沒有身份驗證,但我的本地計算機已設置爲相互身份驗證。

1
相關問題