3

我有一个应用程序,它每天检索一次数据并将其存储到数据库中。直到最近,该应用程序一直与 SQL Server 驻留在同一台机器上,但由于某些必需外围设备的一些硬件问题,它已被移至运行 Windows XP 的单独机器上。

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

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

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

4

6 回答 6

1

多谢你们,

只是为了填写您,我们通过更改 dcom 配置以使用位于 SQL 服务器上的远程协调器解决了这个问题,到目前为止我们还没有遇到任何进一步的问题。

于 2009-08-06T21:52:47.767 回答
0

我建议您首先查看所有相关机器的事件日志,看看还有什么。您正在对正在发生的事情进行假设。这可能是一个很好的假设,但我建议您在进行更改之前先了解一下。

我还将开始将此问题移至 ServerFault 的过程,在那里您可能会得到更快的答案。如果时间太长(五个人必须投票),那么您可能需要手动去那里问问题。如果您这样做了,则表明原件(并通过链接)可能正在发送中。

于 2009-08-05T01:47:15.583 回答
0

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

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

于 2009-08-05T01:47:38.733 回答
0

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

编辑:这是一篇讨论相同问题的MSDN 知识库文章。

于 2009-08-05T01:48:32.367 回答
0

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

于 2009-08-05T01:49:15.940 回答
0

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

于 2015-02-18T12:45:57.747 回答