今天寫ASP.NET程序,在網頁后台的c#代碼里寫了個事務,事務內部對一張表進行批量插入,對另外一張表進行查詢與批量插入。
結果第二張表查詢后foreach迭代操作時報錯:已禁用對分布式事務管理器(MSDTC)的網絡訪問。請使用組件服務管理工具啟用 DTC 以便在 MSDTC 安全配置中進行網絡訪問。
我的開發環境:開發機:WINXP,vs2010,IIS, 服務器:WIN2003,VS2010,SQL2005
解決:需要在開發機和服務器都添加MSDTC事務管理器(我直接操作Windows xp配置MSDTC的方法),具體如下:
1、刪除注冊表中的鍵:
1.HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSDTC
2.HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC
4、停止MSDTC服務:net stop msdtc
5、卸載MSDTC服務:msdtc -uninstall
6、重新安裝MSDTC服務:msdtc -install
操作系統最好不要用ghost安裝。
啟用網絡Com+ 訪問
啟用網DTC
也一起安裝一下
網絡MSDTC配置方法我們有時會發現一下問題:已禁用對分布式事務管理器(MSDTC)的網絡訪問。請使用組件服務管理工具啟用 DTC 以便在 MSDTC 安全配置中進行網絡訪問。可以由本文解決。一、啟用網絡 DTC 訪問的步驟
啟用網絡DTC是分布式數據庫事物控制的必要條件。設置過程應依下面步驟進行。
1) 單擊“開始”,指向“控制面板”,然后單擊“添加或刪除程序”;
2) 單擊“添加/刪除 Windows 組件”;
3) 選擇“應用程序服務器”,然后單擊“詳細信息”;
4) 選擇“啟用網絡 DTC 訪問”, 網絡管理 、網絡事務、XA 事務。另外,DTC 登錄帳戶一定要設置為“NT Authority\NetworkService”,並且事務管理器通訊不要求進行驗證。然后單擊“確定”;
5) 單擊“下一步”;
6) 單擊“完成”;
7) 停止分布式事務處理協調器服務,然后重新予以啟動;
8) 停止 Microsoft SQL Server 和其他參與分布式事務處理的資源管理器服務(如 Microsoft 消息隊列),然后將其重新啟動。
控制面板-----〉管理工具-----〉組件服務
選擇組件服務-----〉計算機--------〉我的電腦,再點擊鼠標右鍵。
引自:http://www.cnblogs.com/lastbeachhead/archive/2009/04/14/1435448.html
配置msdtc需要分別配置數據庫服務器和開發機,因為只有兩個機器都配置正確了,分布式事務才不會報烏七八糟的錯誤。如果數據庫服務器和開發機是同一台機器,那就不用看本文了,因為不存在分布式事務的問題。
數據庫服務器和開發機中配置msdtc的步驟是一樣的,下面列出配置步驟。
1、防火牆。如果防火牆是關的,那就不用再設置了。如果防火牆是開的,那么確保msdtc.exe是在它的例外里,一般這個程序是在C:\Windows \System32 \msdtc.exe這個角落。有時候你會發現在防火牆的例外里添加了msdtc,還是不行,那有可能是跟一個端口有關系,即135端口,這是個RPC端 口,在出錯的時候,可以嘗試將該端口也添加到防火牆的例外里。
2、打相關數據庫補丁。如果數據庫服務器是sql2000,那么確保已經打了sp4補丁。也許有人會說,這是什么年代了,還用sql2000做數據庫服務 器,但是要記住,買單的是客戶,而不是我們自己,客戶一般情況下幾年前買了sql2000,不一定會被你說服去花錢升級到2005或2008。如果數據庫 是sql2005,那么最好把sq2 補丁打上。
3、msdtc的配置。msdtc的配置是在組件服務里進行的,具體如下圖所示,我也就不一一說了。這里是用windows2008為例的,其它版本的設置都類似。
在使用本地協調器上打上勾。
設置msdtc屬性頁
關鍵是這頁一定要設置正確。
4、設置com+。很多人遇到msdtc的問題后,在網上百搜搜不到解決辦法,故流傳被com+徹底打敗了,偶對com+沒什么研究,下面的設置也是從別人那里學的,我這里做個總結而已。
編輯[訪問權限]和[啟動和激活權限]的默認值,將network service賬號設置為擁有所有權限。
5、檢查注冊表。檢查下圖中顯示的兩項的值。在注冊表中的路徑在圖片的下方可以看到。
1.啟動2台sql server服務器的msdtc服務,做cluster的話,必須為每個節點運行comclust.exe
2.2台sqlserver都要設置好對方的linkserver,
3.如果2台sql server服務器不屬於同一個網段,則需要雙方配置host,保證ping機器名可以ping通對方
4.可以使用dtcping工具測試一下
5.這樣,就sql server可以進行分部式查詢和事務操作了。