MSDTC首次交易失败

时间:2009-08-05 01:42:49

标签: c# msdtc

我有一个应用程序,每天检索一次数据并存储到数据库中。直到最近,这个应用程序与SQL服务器位于同一台机器上,但是由于某些必需的外围设备存在一些硬件问题,它已被转移到运行Windows XP的独立机器上。

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

  

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

但是,立即重新运行该事务是成功的。好像MSDTC花了很长时间来响应第一笔交易,因此失败了,但随后准备好了第二笔交易。我发现在互联网上发现了几个这样的引用,但没有找到真正的解决方案。有没有遇到过这个?如果是这样,有没有办法阻止MSDTC从内存中卸载,还是有其他解决办法,例如延长超时?

6 个答案:

答案 0 :(得分:1)

谢谢你们,

为了让您满意,我们通过更改dcom配置以使用位于SQL服务器上的远程协调器来解决此问题,到目前为止我们还没有遇到任何其他问题。

答案 1 :(得分:0)

我建议你先查看所有涉及的机器的事件日志,看看还有什么。你正在假设发生了什么。这可能是一个很好的假设,但我建议你在做出改变之前先找出答案。

我也将开始将这个问题转移到ServerFault,在那里你可能会得到更快的答案。如果花了太长时间(五个人必须投票),那么你可能想要手动询问那里的问题。如果你这样做,那么表明原始(和链接之后)可能正在进行中。

答案 2 :(得分:0)

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

这将表现为(看似随机的)交易超时。

答案 3 :(得分:0)

亲爱的,我们也面临同样的问题。我们正在将数据从一个数据库迁移到另一个数据库(具有不同的结构),并使用Subsonic来加速该过程。我们使用了事务和 SharedDbConnectionScope 对象,它在运行 XP SP3 的机器上运行失败。我认为SP3中有一些更新可以解决这些问题,因为它在 Vista,2003和2008服务器上工作正常。

编辑:这是MSDN KB article讨论同样的问题。

答案 4 :(得分:0)

您可能会尝试运行一个只需每30分钟左右在DTC上启动和提交交易的流程吗?

答案 5 :(得分:0)

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