【MSDTC】与基础事务管理器的通讯失败 .NET分布式开发报错:“与基础事务管理器的通讯失败”的解决方法

http://blog.sina.com.cn/s/blog_78bb6d040101ddjl.htmlhtml

 

.NET分布式开发报错:“与基础事务管理器的通讯失败”的解决方法

.Net开发过程当中,涉及多个数据库和不一样数据库的分布式事务(Distributed Transaction)开发,有时会碰到“与基础事务管理器的通讯失败”的错误。致使这个错误通常有下列三个缘由:

.Net开发过程当中,涉及多个数据库和不一样数据库的分布式事务(Distributed Transaction)开发,有时会碰到“与基础事务管理器的通讯失败”的错误。致使这个错误通常有下列三个缘由:ios

1)  MSDTC设置不正确;web

2) 是否被防火墙阻挡;数据库

3) 跨网段通信或跨域通信;跨域

在数据库项目开发时,链接一个远程数据库(如SQLServer2005时)时,建立多个数据库链接时,SQLServer2005会自动由 LTM(Light Weight Transaction Manager)升级成OLETX(MSDTC)来处理,开启MSDTC服务,经过RPC远程数据库。排除此问题可经过如下几步来解决:安全

1、检查数据库端机器与客户端(好比Web端)的MSDTC配置,以下图所示:服务器

 

注:在Windows2003+sp1或WinXP+SP2的机器环境时,若客户端和数据库端的操做系统同样(即都为Win2003+sp1或 WinXP+SP2),则能够要求双方进行验证;若客户端和服务端有一方不相同(如为win2000)时,需设置为不要求进行验证;所以安全配置建议设置 为不要求进行验证,如上图所示。分布式

     2、若仍是不成功,能够看一下是否开启网卡上的防火墙,可把MSDTC加入例外,以下图所示:(关于MSDTC与防火墙的问题可参考:http://support.microsoft.com/kb/306843/zh-GB)工具


至于MSDTC的通讯检测,用户能够经过DTCPing(或DTCTester)工具进行测试。DTCPing 需服务端和客户端成对进行测试,一方启动为服务端,而另外一方启动为客户端,进行DTC通讯测试。下图是DTCPing测试的示例:测试

如上图所示,DB服务器和客户端RPC是相互连通能够通讯的。

注意:Remote Server Name为NetBios名称。

 工具能够从微软网站上下载:

DTCPing能够从微软站点下载:http://www.microsoft.com/downloads /details.aspx?FamilyID=5e325025-4dcd-4658-a549-1d549ac17644&DisplayLang=en

DTCPing说明:

http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q306843

DTCTester能够从微软站点下载:http://support.microsoft.com/?scid=kb;en-us;293799

3、在若还不行,看一下数据库服务器与客户端(如web端)是否是在同一网段(或者同一个AD域),检测步骤可参考以下:

a) telnet DbIP 135是否能够通;

b) 而后相互Ping IP;

c) 再ping 相互的NetBios名称,还不通的话

d) 能够修改%windir%/system32/etc/hosts,或%windir%/system32/etc/lmhost.sam去掉文件扩展名,进行DB服务和IP的绑定便可,以下图所示:

在不一样的AD域中,若IP能够ping通,但机器名称不能Ping通,则说明机器名称解析有问题,请检测wins服务和DNS是否正确。

经过以上几步,通常MSDTC的通讯就OK了。

相关文章
相关标签/搜索