2009-08-31 12 views
0

私はWindowsサーバー2003のマシンでホストされているWCFベースのWebサービスを持っています。データベースはsolaris上のOracle 10Gです。 Webサービスでは、transactionscopeとado.netトランザクションをいくつかの場所で使用しています。ほとんどのトランザクションは1つのリソース(複数のOracleストアドプロシージャコール)のみを使用します。その中には2つのリソース(MSMQとOracleストアドプロシージャ)があります。 これにより、WindowsマシンでネットワークDTCを有効にする必要があります。既にMSDTCサービスが開始されています。 WebサービスクライアントからWebサービスへのトランザクションフローはありません。 ネットワークDTCが有効になっていないとうまくいくようですが、私は確信しています。オラクル取引でネットワークDTCを有効にする必要があります

プラットフォームは.Net 2.0 SP1 + 3.0(WCF用)です。オラクルのドライバはODP.Net v11.1.0.6

答えて

1

ネットワークDTCを有効にする必要はありません。唯一の要件は、MSDTCサービスとOracleMTSRecoveryServiceサービスの両方を開始することです。私は、DTCコンポーネントサービスビューアコントロールパネルアプリケーションを使用して起こっているトランザクションを見ることができます。

0

クライアントのトランザクションが流れていない場合、または複数の耐久性のあるリソースがない場合、トランザクションマネージャはトランザクションを分散トランザクションに昇格させません。

トランザクション識別子を確認するには、TransactionクラスのTransactionInformationプロパティにアクセスします。

このクラスにはDistributedIdentifierプロパティがあります。トランザクションが分散トランザクションに昇格されない場合、DistributedIdentifierはGuid.Emptyになります。

+0

私の場合、複数のリソースが関与しています。 MSMQとOracle。 DistributedIdentifierが有効なGUIDであることを確認しました。 – softveda

+0

サーバーでネットワークDTCアクセスを有効にしないと、アプリケーションはローカルコンピュータ上に存在するトランザクションのみを使用できます。 私はあなたのケースでこれを判断するためにいくつかのテストを考えることができます。 MSMQとデータベースをこの順序で永続的に処理し、データベーストランザクションを失敗させるサービスメソッドを記述します。 MSMQトランザクションがロールバックされているかどうかを確認してください。 操作の順序を逆にして別のテストを行い、MSMQ操作に失敗した場合、今回はデータベースのトランザクションをロールバックする必要があります。 – chandmk

+0

私はすでにこれらのテストを行っており、どちらの場合でもトランザクションはロールバックされています(ネットワークDTCがオフの場合)。しかし、私はちょうど確信したかった。 – softveda

関連する問題