2

BeginPeek/を使用して MSMQ からメッセージを覗く古いコードがありますEndPeek。覗いた直後に、メッセージの ID が正常に比較されます。

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

コードの後半でメソッドmessage.Idに渡されReceiveByIdます。これはほとんどの場合機能しますが、散発的に、まさにこの位置で例外がスローされます。

System.InvalidOperationException: メッセージの受信時にプロパティ ラベルが取得されませんでした

そのため、その間にどういうわけかmessage.Id迷子になっているように見えることがあります。このような行動について知っている人はいますか?または何かアイデアはありますか?

4

1 に答える 1

2

私は過去にこの問題に遭遇しました。問題は、BeginPeekを2回呼び出すコードにあり、その結果、PeekCompletedイベントが2回スローされ、毎回同じメッセージが表示されました。メッセージIDをチェックして、エラーを生成したメッセージが以前の時点でアプリによってすでに受信されているかどうかを確認します。これをキャッチするには、PeekCompleteイベントハンドラーの最初のステップとしてメッセージIDを出力する必要がありました。Begin Peekの呼び出しがすでに行われていて、戻っていない場合は、BeginPeekを呼び出さないように十分に注意する必要があります。

于 2012-04-17T20:53:58.960 に答える