我有一些旧代码,使用 BeginPeek
/EndPeek
从 MSMQ 中查看消息。查看后立即成功比较消息的 ID:
if (message.Id != _lastMessageID) { // ... }
稍后在代码中 message.Id
被传递到 ReceiveById
方法。这在大多数情况下都有效,但是,偶尔会在这个位置抛出异常:
System.InvalidOperationException: Property Label was not retrieved when receiving the message
因此有时 message.Id
似乎同时迷失了方向。有人知道这样的行为吗?或者有什么想法?
最佳答案
我以前也遇到过这个问题。问题在于我的代码调用 BeginPeek 两次,这导致 PeekCompleted 事件被抛出两次,每次都有相同的消息。检查消息 ID 以查看您的应用程序是否已在较早的时间点收到产生错误的消息。我必须打印出消息 ID,作为 PeekComplete 事件处理程序中捕获此消息的第一步。如果已经调用 BeginPeek 并且尚未返回,您必须非常小心,不要调用 BeginPeek。
关于c# - 所查看的 MSMQ 消息的 message.ID 不知何故丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10171607/