偷看的MSMQ消息的message.ID不知何故丢失了

时间:2012-04-16 09:25:42

标签: c# .net msmq

我有一些旧代码,使用BeginPeek / EndPeek从MSMQ查看邮件。在窥视后直接比较消息的ID:

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

稍后在代码message.Id中传递给ReceiveById方法。这在大多数情况下是有效的,但是,偶尔会在这个位置上抛出异常:

  

System.InvalidOperationException:未检索到属性标签   收到消息时

因此,有时某种程度上message.Id似乎会迷失方向。有人知道这样的行为吗?或者有什么想法?

1 个答案:

答案 0 :(得分:2)

我过去遇到过这个问题。问题出在我的代码调用BeginPeek两次,导致PeekCompleted事件被抛出两次,每次都有相同的消息。检查消息ID以查看是否已在您的应用较早的时间点收到产生错误的消息。我必须打印出消息ID作为我的PeekComplete事件处理程序中的第一步来捕获它。如果已经开始调用Begin Peek并且尚未返回,则必须非常小心不要调用BeginPeek。