Oracleデータベースにデータを挿入するNetMsmqBindingを使用してWCFサービスを作成したいとします。私はMS Visual StudioをC#と.NET 4.0で使用しています。現在、Oracle 11ではSystem.Data.OracleClientを使用しています。WCF Oracle Database InsertとのMSMQトランザクション
私の要件は、クライアントがコールできると仮定した場合、サービスが正常に終了します(MSMQキューにメッセージが書き込まれます)。
したがって、Oracleへの挿入が成功すると、メッセージがキューから取り出されるようにサービスを設計しようとしています。そうでない場合、メッセージはキューから取り出されるべきではありませんので、一定期間再試行できます。私は、TransactionScopeクラスを使用してトランザクションを使用して、このように動作するようにしています。
しかし、TransactionScopeでOracleにINSERT文を実行すると、例外がスローされ、IISワーカープロセスがクラッシュするようです。 WCF/.NETトランザクションはOracleではサポートされていないようですか?私は、Oracleが.NETフレームワーク内からトランザクションをサポートしているかどうかを示すためにどこにでも明確な回答を見つけることができませんでした。これは可能なのでしょうか、それとも正しい軌道にないのですか?アドバイスをいただければ幸いです。
Oracle MTS Recovery Serviceを実行しています。ただし、ODP.netに言及したコメントから、System.Data.OracleClientはトランザクションでは機能せず、ODP.netを代わりに使用する必要があることを意味しますか?私はすでにSystem.Data.OracleClientを使用しているので、試してみる前に尋ねます。 –
また、wcfサービスから単一のデータベースにクエリを送信するだけなので、分散トランザクションとしての資格があるかどうかは分かりません。 –
Microsoft OracleClientの使用経験がありません。残念ながら、私はそこでお手伝いできません。しかし、私はTransactionScopeを使用してODP経由でトランザクションを分散しています。私にとっては、MTS復旧サービスをインストールするのが難点でした。トランザクションが複数のマシンに渡って伝播され、定義されていれば分散されます。 –