【问题标题】:Should network DTC be enabled for oracle transactions是否应该为预言机交易启用网络 DTC
【发布时间】:2009-08-31 01:53:59
【问题描述】:

我在 windows sever 2003 机器上托管了一个基于 WCF 的 Web 服务。数据库是 solaris 上的 Oracle 10G。 Web 服务广泛使用 transactionscope,并在某些地方使用 ado.net 事务。大多数事务只涉及一种资源(多个 oracle 存储过程调用)。其中一些是两种资源(MSMQ 和 oracle 存储过程)。 鉴于此,必须在 Windows 机器上启用网络 DTC。它已经启动了 MSDTC 服务。 没有从 Web 服务客户端到 Web 服务的事务流。 它似乎在没有启用网络 DTC 的情况下工作,但我想确定一下。

平台是 .Net 2.0 SP1 + 3.0(用于 WCF)。 Oracle驱动是ODP.Net v11.1.0.6

【问题讨论】:

    标签: wcf oracle msdtc


    【解决方案1】:

    我相信不需要启用网络 DTC。唯一的要求是 MSDTC 和 OracleMTSRecoveryService 服务都已启动。我可以使用 DTC 组件服务查看器控制面板应用查看发生的事务。

    【讨论】:

      【解决方案2】:

      如果客户端事务不流动或没有多个持久资源,事务管理器将不会将事务提升为分布式事务。

      您可以通过访问 Transaction 类的 TransactionInformation 属性来检查交易标识符。

      此类具有 DistributedIdentifier 属性。如果事务未升级为分布式事务,则 DistributedIdentifier 将为 Guid.Empty。

      【讨论】:

      • 就我而言,涉及多个资源。 MSMQ 和甲骨文。我检查了 DistributedIdentifier 是有效的 GUID。
      • 当您不在服务器上启用网络 DTC 访问时,应用程序只能使用保留在本地计算机上的事务。我可以考虑几个测试来确定你的情况。编写一个服务方法,该方法涉及按该顺序对 MSMQ 和数据库进行持久事务,并使数据库事务失败。检查MSMQ事务是否回滚通过颠倒操作顺序再次测试,MSMQ操作失败,这次数据库事务应该回滚。
      • 我已经完成了这些测试,并且在任何一种情况下事务都会回滚(网络 DTC 已关闭)。但我只是想确定一下。
      猜你喜欢
      • 2011-02-20
      • 2017-10-28
      • 1970-01-01
      • 2018-08-31
      • 2019-02-13
      • 2019-09-22
      • 1970-01-01
      • 2011-08-20
      • 1970-01-01
      相关资源
      最近更新 更多