天天看點

TransactionScope 之分布式配置

TransactionScope是個好東西,可以自動管理transaction,即使是對分布式資料庫也可以,但是需要一些配置(摸索了2天。。。), 本文的環境為windows 2003:

1. 對跑代碼的機器和sql所在的伺服器進行Component Services的配置

Administative Tools -> Component Services -> 點開Component Services -> Computers -> My computer -> 右鍵屬性 -> 選擇MSDTC -> Security Configuration -> 按如下配置 -> OK -> 重新開機Distributed Transaction Coordinator服務(一定要手動重新開機喲)

TransactionScope 之分布式配置

最重要的是Allow Inbound 和 Allow Outbound, 其他意義如下:

2. 配置防火牆,同樣也是對跑代碼的機器和sql所在的伺服器進行配置

Windows Firewall -> Exceptions -> Add Program -> Browse -> "C:/WINDOWS/system32/msdtc.exe" -> OK

msdtc.exe 是windows 分布式服務程式。

部落格園上的一個解決方法:

第一步:

--------------------

win2003預設禁用遠端/網絡事務,啟用的步驟如下:

啟用網絡 DTC 通路的步驟

1. 單擊“開始”,指向“控制台”,然後單擊“添加/删除程式”。

2. 單擊“添加/删除 Windows 元件”。

3. 選擇“應用程式伺服器”,然後單擊“詳細資訊”。

4. 選擇“啟用網絡 DTC 通路”,然後單擊“确定”。

5. 單擊“下一步”。

6. 單擊“完成”。

7. 停止分布式事務協調器服務,然後重新予以啟動。

8. 停止參與分布式事務的任何資料總管服務(如 Microsoft SQL Server 或 Microsoft Message Queue Server),然後重新予以啟動。

--------------------------------

第二步:

設定MSDTC:控制台->管理工具->元件服務->我的電腦->右鍵->屬性->MSDTC->安全配置(Security Configuration)->打開Network DTC Access 同時打上

Allow Inbound ,Allow Outbound ,No Authentication Required,Enable Transaction Internet Protocol[TIP] Transaction

---------------------------------

第三步:将MSDTC程式添加入Windows防火牆

注意:兩台參與分布事務的機器都需按如上操作設定。如果還有問題,則重新開機機器。

比我多了第一步,在我的試驗中沒有用到第一步。

有人說TransactionScope不支援跨域通路,在我的實驗中,是可以跨域的。

關于TransactionScope有幾點需要補充:

1. connection 須在TransactionScope内部打開且關閉

2. 執行sql時出現的異常要抛出到TransactionScope,以使得TransactionScope知道發生異常了,準備復原