分布式事務中遇到的 “與基礎事務管理器的通信失敗”的解決方法


首先是ef的多數據庫操作實現事務的方法 

 

復制代碼
public int AddDifferenceDB(userinfo1 user1, userinfo user) { int result = 0; using (var test2DB = new test2Entities1()) { using (var test1DB = new test1Entities1()) { using (TransactionScope trans = new TransactionScope()) { try { test2DB.Set<userinfo1>().Add(user1); test1DB.Set<userinfo>().Add(user); result += test2DB.SaveChanges(); result += test1DB.SaveChanges(); trans.Complete(); } catch (Exception ex) { trans.Dispose();//出現異常,事務手動釋放 Log log = new Log(); Task.Run(async () => await log.AsyncAddLog("xxx添加出錯,事務已回滾", ErrorType.Error, ex));//寫入錯誤日志,正式環境下把XXX更換成當前操作人的ID return -1; } } } } return result; }
復制代碼

方法很簡單。 沒啥可說的。

主要是在

result += test1DB.SaveChanges();
的時候 總是出現錯誤。 各種各樣的錯誤。。
但是從頭到尾的解決辦法還是有的。 按照這個步驟操作應該就能解決大部分人遇到的問題

1.檢查msdtc服務是否開啟

        1.在windows控制面版-->管理工具-->服務-->Distributed Transaction Coordinator-->(右鍵)屬性-->安全
 
 
        2.在CMD下運行"net start msdtc"開啟服務后正常。
2.檢查防火牆,我是在本地做的測試,所以直接把防火牆關閉了,在正式服務器上是要配置入站規則和出站規則。
3.添加hosts
     在DB服務器上需要添加web服務器的機器名和地址。否則容易出現“ 與基礎事務管理器的通信失敗”這個錯誤。    
     需注意  hosts里面最后一行如果不加回車的話是不識別最后一行的。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM