MsmqBinding を介して WCF サービスを呼び出す WCF クライアントを実行しています。フレームワークは .Net 4.0、クライアントとサーバーは Windows Server 2008 R2 で動作します。チャネル キューはトランザクションです。
サービスは、次のバインド パラメータでホストされます。
receiveErrorHandling="Move"
receiveRetryCount="3"
retryCycleDelay="00:00:20"
maxRetryCycles="5"
((ReceiveRetryCount+1) * (MaxRetryCycles + 1)) が有効であるとすると、特定のメッセージがポイズン サブキューに移動される前に、4*6 = 24 回の再試行が行われます。
IErrorHandler をサービスにアタッチすると、wcf サブシステムが最終的にメッセージを ;poison サブキューに移動する前に、HandleError が MsmqPoisonMessageException で合計 6 回 (有害メッセージの場合) 呼び出されることに気付きました。
メッセージの再試行が完了し、メッセージがポイズン キューに移動された正確な時刻をログに記録したいと考えています。唯一のオプションは、特定のメッセージが失敗した回数をカウントし、このカウントをバインディング MaxRetryCycles と比較することです。これは扱いにくく、エラーが発生しやすいです。
私の質問は:
- wcf サブシステムがメッセージをポイズン キューに移動するイベントを最終的に検出する方法はありますか?
私の参照は次のとおりです 。 http://msdn.microsoft.com/en-us/library/aa395218.aspx