MSDTC 分布式事务错误:[COMException (0x8004d00e): 此事务已明地或暗地被确认或终止 (异常来自 HRESULT:0x8004D00E)]

时间:2021-05-03 18:59:26
// 堆栈信息
[COMException (0x8004d00e): 此事务已明地或暗地被确认或终止 (异常来自 HRESULT:0x8004D00E)]
   System.Transactions.Oletx.ITransactionShim.Export(UInt32 whereaboutsSize, Byte[] whereabouts, Int32& cookieIndex, UInt32& cookieSize, CoTaskMemHandle& cookieBuffer) +0
   System.Transactions.TransactionInterop.GetExportCookie(Transaction transaction, Byte[] whereabouts) +237

[TransactionException: 事务已被隐式或显式提交,或已终止。]
   System.Transactions.Oletx.OletxTransactionManager.ProxyException(COMException comException) +412
   System.Transactions.TransactionInterop.GetExportCookie(Transaction transaction, Byte[] whereabouts) +292
   System.Data.SqlClient.SqlInternalConnection.EnlistNonNull(Transaction tx) +527
   System.Data.SqlClient.SqlInternalConnection.Enlist(Transaction tx) +801124
   System.Data.SqlClient.SqlInternalConnectionTds.Activate(Transaction transaction) +795031
   System.Data.ProviderBase.DbConnectionInternal.ActivateConnection(Transaction transaction) +30
   System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject) +1205
   System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) +82
   System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) +105
   System.Data.SqlClient.SqlConnection.Open() +111
   Enhua.RS.SQLServerDAL.TemplateDb.DeleteTemplate(Int32 templateId) in E:\NHRS\NHRSWeb\SQLServerDAL\TemplateDb.cs:248 // 异常起点,在这里 !!!!!

// 出错代码
// 以上省略若干 TranactionScope 详细声明
 foreach (DataRow r in rows) {
行 247:                    using (SqlConnection conn = new SqlConnection(r["ConnectionString"].ToString())) {
行 248:                        conn.Open();     // Open 的时候就丢出异常了!!!!!
行 249:                        SqlCommand cmd = conn.CreateCommand();
行 250:                        foreach (DataRow jrow in dsTpl.Tables[0].Rows) {

// 环境
IIS 与 SQL 同一台服务器没有问题,

【不同服务器】就出问题了

两台服务器均是 win 2k3 sp2,

之前 sp1 是可以正常访问的,刚打 SP2 就遭了

估计是 sp2 增加了某些安全性,不知如何配置?

baidu/google 都尝试了均无方案 ....


Thx!

11 个解决方案

#1


以前听说过,这和SQL没有关系,据说是该window下一个hosts文件,LZ可以顺着这个思路继续研究~

#2


cnblogs 上有位网友也说的这个 host, 但是不晓得是虾米哦, 也没有说具体如何操作
狂郁闷中 ...

#3


神了,似乎可以了,竟然又跑起来了 :)

处理方法:

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

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

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

3.
添加一行 Web 服务器 IP 和 主机名映射, 如 

10.10.1.118  MyWebServerHostName

4.
OK!

#4


哦,恭喜楼主已经解决了

#5


恭喜LZ,host,呵呵~

#6


没事了,jf

#7


也可以使用Dtcping来测试2台机器之间是否能通

同时2台机器之间必须能ping的通hostname,否则msdtc也是不起作用的

#8


来接分

#9


完全是 MSDTC 新手,碰到问题就卡壳了 @_@

幸好这世界有样东东叫【搜索引擎】 :)

晚上回学校结帖 ~

#10


@Night

有个问题,为什么之前 win2k3 sp1 不需要,这项修改 hosts 的工作呢?

不过,之前测试的 Web 服务器是 xp sp2, DB 服务器是 2k3 sp1

#11


hosts 文件是必须要修改的,因为msdtc需要name resolution是没有问题的,我想是不是因为sp1时你已经设置了hosts,而打了sp2后,就被ms给打没了呢?

#1


以前听说过,这和SQL没有关系,据说是该window下一个hosts文件,LZ可以顺着这个思路继续研究~

#2


cnblogs 上有位网友也说的这个 host, 但是不晓得是虾米哦, 也没有说具体如何操作
狂郁闷中 ...

#3


神了,似乎可以了,竟然又跑起来了 :)

处理方法:

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

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

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

3.
添加一行 Web 服务器 IP 和 主机名映射, 如 

10.10.1.118  MyWebServerHostName

4.
OK!

#4


哦,恭喜楼主已经解决了

#5


恭喜LZ,host,呵呵~

#6


没事了,jf

#7


也可以使用Dtcping来测试2台机器之间是否能通

同时2台机器之间必须能ping的通hostname,否则msdtc也是不起作用的

#8


来接分

#9


完全是 MSDTC 新手,碰到问题就卡壳了 @_@

幸好这世界有样东东叫【搜索引擎】 :)

晚上回学校结帖 ~

#10


@Night

有个问题,为什么之前 win2k3 sp1 不需要,这项修改 hosts 的工作呢?

不过,之前测试的 Web 服务器是 xp sp2, DB 服务器是 2k3 sp1

#11


hosts 文件是必须要修改的,因为msdtc需要name resolution是没有问题的,我想是不是因为sp1时你已经设置了hosts,而打了sp2后,就被ms给打没了呢?