c# - 所查看的 MSMQ 消息的 message.ID 不知何故丢失

标签 c# .net msmq

我有一些旧代码,使用 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/

相关文章:

c# - 使用 Task.Run 而不是 Delegate.BeginInvoke

c# - 使用 Microsoft.Extensions.DependencyInjection,我可以解析类型并构造实例,同时提供额外的构造函数参数吗?

.net - 先学什么——C++/STL/QT 或 .NET/C#——如果我的学习和工作时间有限?

.net - 在 Visual Studio 中使用 Com Interop 选项注册可以,但直接调用 Regasm 则不行

c# - 在控制台应用程序之外检测指纹读取器输入

msmq - 第一条消息未通过 MSMQ/MassTransit 服务总线到达

c# - 我应该如何防御性地编程?

c# - 在 C# 中将未知的 long\int\short 转换为 double

c# - C# 中的可事务对象?

c# - 以编程方式在 MSMQ 中添加私有(private)队列