1. 程式人生 > >【轉】關於TransactionScope出錯:“與基礎事務管理器的通訊失敗”的解決方法

【轉】關於TransactionScope出錯:“與基礎事務管理器的通訊失敗”的解決方法

異常資訊:

System.Transactions.TransactionManagerCommunicationException: 與基礎事務管理器的通訊失敗。 ---> System.Runtime.InteropServices.COMException: 由於通訊問題,MSDTC 事務管理器無法從源事務管理器提取事務。可能原因如下: 存在防火牆並且沒有 MSDTC 程序的例外、兩臺計算機根據其 NetBIOS 名稱無法找到彼此,或未對於兩個事務管理器之一啟用網路事務支援。 (異常來自 HRESULT:0x8004D02B)

解決辦法:

一、對雙方MSDTC元件設定
步驟:
1.控制面板->管理工具->元件服務->計算機->我的電腦->右鍵->屬性


2. 選擇MSDTC頁, 確認"使用本地協調器"
3.點選下方"安全配置"按鈕
4. 勾選: "允許網路訪問","允許遠端客戶端","允許入站","允許出站","不要求進行身份驗證".
5. 對於資料庫伺服器端, 可選擇"要求對呼叫方驗證"
停止分散式事務協調器服務,然後重新予以啟動。   
停止參與分散式事務的任何資源管理器服務(如 Microsoft SQL Server 或 Microsoft Message Queue Server),然後重新予以啟動。   
6.在雙方防火牆中增加MSDTC.exe例外,可用命令列: netsh firewall set allowedprogram %windir%\system32\msdtc.exe MSDTC enable

7.dtC用到remoting的135埠,確保防火牆沒有阻止

二、在資料庫伺服器(MSSQL)上的 hosts 檔案中加入 Web 伺服器(IIS) 的 IP 和 主機名 對映對  
1.定位到 C:\WINDOWS\system32\drivers\etc 目錄
2.記事本開啟 hosts 檔案(沒有副檔名)
3.新增一行 Web 伺服器 IP 和 主機名對映, 如:
10.10.1.118 MyWebServerHostName
192.168.1.25 jack