我有一些旧代码,使用BeginPeek
/ EndPeek
从MSMQ查看邮件。在窥视后直接比较消息的ID:
if (message.Id != _lastMessageID) { // ... }
稍后在代码message.Id
中传递给ReceiveById
方法。这在大多数情况下是有效的,但是,偶尔会在这个位置上抛出异常:
System.InvalidOperationException:未检索到属性标签 收到消息时
因此,有时某种程度上message.Id
似乎会迷失方向。有人知道这样的行为吗?或者有什么想法?
答案 0 :(得分:2)
我过去遇到过这个问题。问题出在我的代码调用BeginPeek两次,导致PeekCompleted事件被抛出两次,每次都有相同的消息。检查消息ID以查看是否已在您的应用较早的时间点收到产生错误的消息。我必须打印出消息ID作为我的PeekComplete事件处理程序中的第一步来捕获它。如果已经开始调用Begin Peek并且尚未返回,则必须非常小心不要调用BeginPeek。