代码改变世界

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

2008-07-31 21:18  Kevin Zhou  阅读(5565)  评论(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跨网域通信的问题。一般做了此步,问题基本都可解决