2012-04-16 13 views
2

私は古いコードを持っています。BeginPeek/EndPeekを使用してMSMQからのメッセージを覗いています。メッセージ。覗き見られたMSMQメッセージのIDは何とか失われます

if (message.Id != _lastMessageID) { // ... } 

後のコードmessage.IdReceiveByIdメソッドに渡されます。直接覗いた後、それが成功したメッセージのIDを比較します。これは、ほとんどの時間の作品は、しかし、散発的に正確なこの位置でスローされた例外があります:

のSystem.InvalidOperationException:

だから、時々何とかmessage.Idメッセージを受信したときに、プロパティラベルは 取得されていませんでした一方で失われているようだ。誰もこのような行動について知っていますか?または任意のアイデアがありますか?

答えて

2

私は過去にこの問題が発生しました。問題は、同じメッセージたびに、二回投げられるPeekCompletedイベントになった二回BeginPeekを呼ぶ私のコード、とありました。メッセージIDを確認して、エラーを生成したメッセージがアプリによって以前の時点ですでに受信されているかどうかを確認します。私はPeekCompleteイベントハンドラの最初のステップとしてメッセージIDを表示する必要がありました。 Begin Peekへの呼び出しが既に行われていて返されていない場合、BeginPeekを呼び出さないように非常に注意する必要があります。

関連する問題