私は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
私の場合、複数のリソースが関与しています。 MSMQとOracle。 DistributedIdentifierが有効なGUIDであることを確認しました。 – softveda
サーバーでネットワークDTCアクセスを有効にしないと、アプリケーションはローカルコンピュータ上に存在するトランザクションのみを使用できます。 私はあなたのケースでこれを判断するためにいくつかのテストを考えることができます。 MSMQとデータベースをこの順序で永続的に処理し、データベーストランザクションを失敗させるサービスメソッドを記述します。 MSMQトランザクションがロールバックされているかどうかを確認してください。 操作の順序を逆にして別のテストを行い、MSMQ操作に失敗した場合、今回はデータベースのトランザクションをロールバックする必要があります。 – chandmk
私はすでにこれらのテストを行っており、どちらの場合でもトランザクションはロールバックされています(ネットワークDTCがオフの場合)。しかし、私はちょうど確信したかった。 – softveda