C# MSDTC在第一个事务中失败

C# MSDTC在第一个事务中失败,c#,msdtc,C#,Msdtc,我有一个每天检索数据并存储到数据库中一次的应用程序。直到最近,此应用程序仍与SQL server驻留在同一台计算机上,但由于某些所需外围设备的某些硬件问题,它已被移动到运行windows XP的另一台计算机上 我们在这里遇到的问题是,当早上的第一个事务运行时,我们会收到以下堆栈跟踪: System.Transactions.TransactionManager通信异常:与基础事务管理器的通信失败。-->System.Runtime.InteropServices.COMException(0x8

我有一个每天检索数据并存储到数据库中一次的应用程序。直到最近,此应用程序仍与SQL server驻留在同一台计算机上,但由于某些所需外围设备的某些硬件问题,它已被移动到运行windows XP的另一台计算机上

我们在这里遇到的问题是,当早上的第一个事务运行时,我们会收到以下堆栈跟踪:

System.Transactions.TransactionManager通信异常:与基础事务管理器的通信失败。-->System.Runtime.InteropServices.COMException(0x80004005):调用COM组件时返回错误HRESULT E_FAIL


但是,立即重新运行事务是成功的。MSDTC似乎花了太长的时间来响应第一个事务,因此失败了,但随后准备好进行第二个事务。我在互联网上找到了一些关于这一点的参考资料,但没有找到真正的解决办法。有人遇到过这种情况吗?如果是这样,是否有办法防止MSDTC从内存中卸载,或者是否有其他解决方案,例如延长超时时间?

我建议您首先查看所有相关机器的事件日志,看看还有什么其他解决方案。你在假设发生了什么。这可能是一个很好的假设,但我建议您在做出更改之前先了解一下

我还将开始将这个问题转移到ServerFault的过程,在那里您可能会得到更快的答案。如果时间太长(需要五个人投票),那么你可能想去手动问那边的问题。如果您这样做了,那么请指出原始的(以及经过链接的)可能正在进行中。

需要注意的一件事(这可能不是问题的原因),就是确保客户端IP上的反向DNS查找实际解析为指向客户端机器的名称。我们的DNS/DHCP设置有问题,一个IP与多个名称匹配。当MSDTC的远程端尝试连接回客户端上的MSDTC时,它正在尝试连接到其他计算机


这将表现为(看似随机的)事务超时。

哦,亲爱的,我们也面临着同样的问题。我们正在将数据从一个数据库迁移到另一个数据库(具有不同的结构),并使用它来加速这个过程。我们使用了transactions和SharedDbConnectionScope对象,它在运行XP SP3的机器上同样失败。我认为SP3中有一些更新打破了这一局面,因为它在Vista、2003和2008服务器上运行良好


编辑:下面是一个讨论相同问题的示例。

您可能可以尝试运行一个进程,该进程只需每隔30分钟左右启动并提交一次DTC事务?

谢谢大家


为了让您了解,我们已通过将dcom配置更改为使用SQL server上的远程协调器解决了此问题,到目前为止,我们还没有遇到任何其他问题。

我们的测试环境中也存在类似问题。10分钟不活动后发生的第一个事务失败,错误为“与基础事务管理器的通信失败”。
经过一些研究,我们得出结论,MSDTC连接已被取消,无法在所需的时间内建立(此操作的默认超时为4秒)。 为了解决这个问题,我们增加了客户端计算机等待来自服务器计算机的绑定数据包响应的时间长度。这是通过在客户端计算机的注册表中添加一个项来完成的: