NServiceBusがメッセージを受け取ると、以下の例外が発生して失敗することがあります。これによりNServiceBusが再試行されます(再試行の上限が設定されています)。再試行の1つでは、メッセージが正常に処理されることがありますが、すべての再試行が同じ例外で失敗するのが一般的です。この場合、メッセージは、すべての再試行が失敗したときに予想通りにエラーキューにルーティングされます。NServiceBus:「失敗した処理が完了しました」メッセージ処理のイベントが発生します。
私の質問は... 最初にこの例外が発生する原因は何ですか?私のコードがスタックトレースに表示されないので、メッセージハンドラコードに関連して表示されません。
- NServiceBusバージョン:2.6.0.1504
- OS:ハンドラのコードはここに.NET 3.5またはそれ以前の
をターゲットにしているWindows Server 2003
NServiceBus.Unicast.Transport.Msmq.MsmqTransport [(null)] - Failed raising 'finished message processing' event. System.Messaging.MessageQueueException: Cannot enlist the transaction.
at System.Messaging.MessageQueue.SendInternal(Object obj, MessageQueueTransaction internalTransaction, MessageQueueTransactionType transactionType)
at System.Messaging.MessageQueue.Send(Object obj, MessageQueueTransactionType transactionType)
at NServiceBus.Unicast.Transport.Msmq.MsmqTransport.SendMsmqMessage(Message m, String destination)
at NServiceBus.Unicast.Transport.Msmq.MsmqTransport.Send(TransportMessage m, String destination)
at NServiceBus.Unicast.UnicastBus.SendReadyMessage(Boolean startup)
at NServiceBus.Unicast.UnicastBus.TransportFinishedMessageProcessing(Object sender, EventArgs e)
at NServiceBus.Unicast.Transport.Msmq.MsmqTransport.OnFinishedMessageProcessing()
最終的に、これは既存のデータベース競合問題の結果として発生していました。ハンドラコードで問題が発生したとき、DTCトランザクションが途中で終了したように見える例外がスローされました。これにより、MSMQが使用できないトランザクションを登録できなかったときの上記のエラーが発生しました。なぜ私たちのコードがこれを最初に明らかにしなかったのかについての(恥ずかしい)詳細を私はあなたに惜しまないでしょう。ご協力いただきありがとうございます! –