2

.NET 4.5 Windows サービスで Oracle Advanced Queuing を使用しています。サービスは、Oracle Queue (11gR2) から読み取り、トランザクションでメッセージを処理する必要があります。これは、キュー内の最初のメッセージではうまく機能しますが、2 番目のメッセージを処理するときに、System.AccessViolationException が Oracle クライアントの奥深くでスローされます。

このサービスは、次のことをループで実行します。

  1. 新しいトランザクションを開始します (TransactionScope を使用)
  2. 新しい OracleConnection を作成します
  3. この接続で新しい OracleAQQueue を作成します
  4. OracleAQQueue の DequeueOptions.Wait プロパティを 3 に設定します。
  5. OracleConnection を開きます
  6. OracleAQQueue で Dequeue() をコールします
  7. カスタム ビジネス ロジックを使用してメッセージを処理する
  8. 1)からのトランザクションを完了する(コミットする)
  9. OracleAQQueue および OracleConnection を破棄する

キュー内の最初のメッセージが処理されますが、次のループで次の StrackTrace が取得され、Windows サービスが終了します。

System.AccessViolationException
スタック:
   Oracle.DataAccess.Client.OpsAQ.FreeCachedDesc (IntPtr ByRef、IntPtr ByRef、IntPtr ByRef) で
   Oracle.DataAccess.Client.OpsAQ.FreeCachedDesc (IntPtr ByRef、IntPtr ByRef、IntPtr ByRef) で
   Oracle.DataAccess.Client.OracleAQQueue.Dispose(ブール値)で
   StarTrack.Common.Messaging.AQ.InternalOracleQueue.Dispose() で
   ....

Oracle クライアント 11.2.0.3.0 (64 ビット) を使用しています。

更新: 12.1.0.1.0 (64 ビット) クライアントでも試してみましたが、同じ問題です。

誰かが同様の問題でOracle Advanced Queueingを実行し、それを解決しましたか?

よろしく、 マーカス

4

0 に答える 0