代码改变世界

关于 MSDTC 分布式事务两个常见错误

2007-09-09 22:52  晓风残月  阅读(...)  评论(...编辑  收藏
假如分布式事务的客户端和服务器端(可能N个)不在同一台服务器上,如分别为 Web服务器 和 Db 服务器,可能会出现以下两个错误

1. 该伙伴事务管理器已经禁止了它对远程/网络事务的支持
通常这由安全配置引起的,对于 xp sp2/2k3+ ,默认可能关闭了远程客户端访问 MSDTC,
如何配置见网友 小小蚂蚱 图文并茂的说明:
http://blog.csdn.net/bo310/archive/2007/08/30/1765728.aspx (找到最后一节“需要特别补充的是:”)
感谢 小小蚂蚱


2. [COMException (0x8004d00e): 此事务已明地或暗地被确认或终止 (异常来自 HRESULT:0x8004D00E)]

昨天刚解决的此问题:

在数据库服务器(MS SQL)上的 hosts 文件中加入 Web 服务器(IIS) 的 IP 和 主机名 映射对

a. 定位到 C:\WINDOWS\system32\drivers\etc 目录

b. 记事本打开 hosts 文件(没有扩展名)

c. 添加一行 Web 服务器 IP 和 主机名映射, 两者以至少一个空格相隔, 如

10.10.1.118 MyWebServerHostName

d. Save,OK!

虽然问题,解决了,但是依然有疑惑:
为何我使用 IP 连接还需要映射 HostName?后面参考 分布式事务(一)——MTS设置 中提到“如果Server之间跨网段,则Server之间需要能互相PING到机器名(而不是IP地址)”,但是我的环境的的确确就是同一个局域网啊?
为何 MSDTC 需要 HostName ?

此主题相关参考:
什么是 hosts ?它有什么作用?
http://baike.baidu.com/view/597330.htm

分布式事务(一)——MTS设置
http://blog.csdn.net/honkerhero/archive/2007/03/28/1544072.aspx

TransactionScope异常:该伙伴事务管理器已经禁止了它对远程/网络事务的支持
http://www.cnblogs.com/crabo/archive/2007/05/17/750118.html

http://topic.csdn.net/t/20050609/20/4071871.html
webservice实现com+事务出现"此事务已明地或暗地被确认或终止"问题

收到 " 一个 A Microsoft 分布式事务协调器问题阻止连接到配置数据库 " 发布程序集从 BizTalk Server 2004 时错误信息
http://support.microsoft.com/?kbid=839187

MSDTC 分布式事务错误:[COMException (0x8004d00e): 此事务已明地或暗地被确认或终止 (异常来自 HRESULT:0x8004D00E)]
http://community.csdn.net/Expert/TopicView3.asp?id=5748153

DTCPing.exe 工具
http://download.microsoft.com/download/complus/msdtc/1.7/nt45/en-us/DTCPing.exe