【问题标题】:MSDTC failing on first transactionMSDTC 第一次交易失败
【发布时间】:2010-11-16 21:02:45
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c# msdtc


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        编辑:这是一个讨论相同问题的MSDN KB article

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

            谢谢大家,

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

            【讨论】:

              【解决方案6】:

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2021-04-15
                • 1970-01-01
                • 2021-05-11
                • 2014-04-09
                • 1970-01-01
                • 2015-08-27
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多