分散式事務TransactionScope所導致幾個坑
阿新 • • 發佈:2019-08-27
記錄一下,個人見解,歡迎指正
錯誤:
1.該夥伴事務管理器已經禁止了它對遠端/網路事務的支援。 (異常來自 HRESULT:0x8004D025)
2.事務已被隱式或顯式提交,或已終止
3.此操作對該事務的狀態無效。
通過分析得到這個是與分散式事務有關的問題。。有以下解決辦法:
1.設定 資料庫的連結字串屬性: Enlist=false 類似於:Data Source="*;Initial Catalog=*;User ID=sa;Password=sa;Enlist=false;" 其實Enlist這個玩意兒預設是為true的。。表示是否開啟事務登記。。 關閉的話,自然而然的就沒了以上分散式事務所帶來的的問題。
2.設定分散式事務的隔離機制。 上面的錯誤其實就是分散式事務交叉使用,所帶來的TransactionScope裡SqlClient 連接出錯。所以理論上設定事務的隔離機制是可以解決問題的。(這種我沒有實現)
3.設定客戶端和服務端的DTC。開啟控制面板->管理工具->元件服務,右擊"本地DTC",屬性--安全下,全勾上,事務管理器通訊中的勾選"不要求進行驗證“。意思大致上位開啟遠端/網路的事務支援。詳細內容可以自行搜尋。。
以上三個解決方式,個人建議。要是離不開分散式事務的話,就第三種方式。不想用分散式用第一種辦法。有時間精力的話,可以試試第二種。另說,TransactionScope這個玩意兒真的是最好不要使用,親身體會其效能跟穩定性較差。現在這麼多好的ORM框架,隨便一種都能將其秒