【问题标题】:WCF MSDTC Transaction elevated but not executedWCF MSDTC 事务提升但未执行
【发布时间】:2011-05-25 14:16:48
【问题描述】:

我不是 WCF 和 MSDTC 方面的专家,所以希望这很简单。我有一个客户端服务器、一个 Web 服务服务器和一个数据库。我希望能够将对 Web 服务服务器的调用包装在 TransactionScope 中,这样如果操作中出现故障,我可以退出。当所有 3 个组件都位于我的本地计算机上时,此设置工作正常。当我将它们移动到单独的服务器时,一切正常,直到调用在 TransactionScope 内。

我可以看到在 dcomcnfg -> 组件服务 -> 计算机 -> 我的电脑 -> 分布式事务协调器 -> 本地 DTC 下的客户端和 Web 服务服务器上都添加了事务。我看到两台机器上都出现了相同的交易。问题是,它只是等待超时并失败。如果我查看应该在 TransactionScope 内发生的 Web 服务调用的事务日志,它们不存在。

我错过了什么?

【问题讨论】:

    标签: wcf msdtc


    【解决方案1】:

    我不建议跨 WCF 服务边界使用 TransactionScope,但如果您必须阅读此内容:

    http://www.stevefenton.co.uk/Content/Blog/Date/200911/Blog/TransactionScope-and-WCF-Services/

    【讨论】:

      【解决方案2】:

      我最近在使用 MSDTC 配置 NServiceBus 和 NHibernate 时看到了类似的症状。

      我的问题的解决方法涉及检查正在使用的身份验证。

      在分布式事务处理协调器的本地 DTC 中,转到属性并检查安全选项卡。您可能需要启用网络 DTC 访问,或更改使用的身份验证。尝试不进行身份验证,看看是否有效,并酌情锁定。

      【讨论】:

      • 我已经将它设置为无身份验证,但仍然得到相同的行为。
      【解决方案3】:

      在这种情况下,它最终成为了防火墙问题。我推迟了它是防火墙问题的想法,因为我看到事务出现在服务服务器事务列表中,但是将分布式事务协调器添加到防火墙中的域通信允许列表中解决了这个问题。

      【讨论】:

        猜你喜欢
        • 2017-10-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多