2

我有一些旧代码,使用BeginPeek/从 MSMQ 偷看消息EndPeek。偷看后直接比较成功的消息ID:

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

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

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

所以有时不知何故message.Id似乎在此期间迷路了。有人知道这样的行为吗?或者有什么想法?

4

1 回答 1

2

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

于 2012-04-17T20:53:58.960 回答