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服務(一定要手動重新開機喲)
最重要的是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知道發生異常了,準備復原