代码改变世界

关于TransactionScope出错:“与基础事务管理器的通信失败”的解决方法总结

  Kevin Zhou  阅读(5585)  评论(6编辑  收藏  举报

 

遇到此问题先需确认几个问题:

       1MS DTC是否设置正确?

       2)是否启用了防火墙?是否对DTC做了例外?

       3)是否做了hosts映射?是否跨网域通信?

 

开发分布式事务,碰到一个错误“与基础事务管理器的通信失败”,去百度了一下,发现问这个问题的人甚多,但是能解决的却很少了,而且所提供的方法无法解决问题。没有办法,我只有转移到Google去搜索E文的。最后发现了三篇“有里程碑性质的文章”:

       http://blog.darkthread.net/blogs/darkthreadtw/archive/2007/08.aspx

       http://blog.darkthread.net/blogs/darkthreadtw/archive/2007/03/15/629.aspx

       http://blog.darkthread.net/blogs/darkthreadtw/archive/2007/02/12/kb-msdtc-cross-different-domains.aspx

 

 

1.错误描述:此错误一般就提示一句:

中文就是:“与基础事务管理器的通信失败”

E文就是:“Communication with the underlying transaction manager has failed

 

碰到此错误是极其郁闷的事情。明明MS DTC

Trans1.JPG
   设置已经正确了啊!?

2.错误排查:

对你的目标DB(最少2台,多则不限)进行

1.Telnet IP 135测试

2.ping IPDBIP 若是不通则不行

 

3.ping IP(应用的IP)        若是不通也不行

 

4.C:\WINDOWS\system32\drivers\etc\hosts文件

应用的SERVER做如下映射:  eg:  192.168.1.10 DB-Server-1

DBSERVER做如下映射:  eg:  192.168.1.50 App-Server-1

 

      

说明:关于Microsoft提到更改注册表设置RPC端口,我不是很赞成。除非遇到了严格的网络环境,Server必须在Firewall下工作,且无法解除所有限制的情况,只有走此下策。具体的设置参看:http://support.microsoft.com/kb/154596/zh-cn

 

       5.错误到此一般都能解决,但是还有相当一部分还是没能解决。那为什么?就是要关注lmhosts文件了,看第3

 

3.Lmhosts文件

       此文件也位于C:\WINDOWS\system32\drivers\etc\,但是可能会看到lmhosts.sam,没有关系,去掉扩展名,就成了lmhosts,然后做映射:

应用的SERVER做如下映射:  eg:  192.168.1.10 DB-Server-1

DBSERVER做如下映射:  eg:  192.168.1.50 App-Server-1

 

       是的,和做hosts差不多。这个是解决RPC跨网域通信的问题。一般做了此步,问题基本都可解决

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示