gpt4 book ai didi

msmq - 使用MSMQ时MessageReadPropertyFilter会重置

转载 作者:行者123 更新时间:2023-12-04 16:50:15 25 4
gpt4 key购买 nike

奇怪的一个我们有一个多线程应用程序,该程序将消息从MSMQ队列中拉出,然后根据消息执行操作。所有这些都是使用DTC完成的。

有时,由于某种原因(我无法描述),在将消息从队列中拉出时,我们会看到消息读取错误。

该应用程序中正在使用的代码:

Message[] allMessagesOnQueue = this.messageQueue.GetAllMessages();

foreach (Message currentMessage in allMessagesOnQueue)
{
if ((currentMessage.Body is IAMessageIDealWith))
{
// do something;
}
}

访问currentMessage.Body时,有时会抛出异常:

System.InvalidOperationException:收到消息时未检索到属性主体。确保正确设置了PropertyFilter。

现在-这仅在某些时间发生-似乎队列上的MessageReadPropertyFilter的Body属性设置为false。

至于它的样子,这是一个谜。 Body属性是默认值之一,我们绝对不会将其显式设置为false。

有没有其他人看到过这种行为,或者知道为什么将此值设置为false?

最佳答案

如前所述,您可以通过System.Messaging.MessagePropertyFilter属性在messageQueue对象上访问的MessageReadPropertyFilter对象上显式设置 bool 值。

如果希望在收到消息或达到峰值后从消息中提取所有数据,请使用:

this.messageQueue.MessageReadPropertyFilter.SetAll(); // add this line
Message[] allMessagesOnQueue = this.messageQueue.GetAllMessages();
// ...

这可能会损害阅读许多邮件的性能,因此,如果您只需要一些其他属性,请使用自定义标志创建一个新的 MessagePropertyFilter:

// Specify to retrieve selected properties.
MessagePropertyFilter filter= new MessagePropertyFilter();
filter.ClearAll();
filter.Body = true;
filter.Priority = true;
this.messageQueue.MessageReadPropertyFilter = filter;
Message[] allMessagesOnQueue = this.messageQueue.GetAllMessages();
// ...

您还可以使用以下方法将其设置回默认值:

this.messageQueue.MessageReadPropertyFilter.SetDefaults();

更多信息在这里: http://msdn.microsoft.com/en-us/library/system.messaging.messagequeue.messagereadpropertyfilter.aspx

关于msmq - 使用MSMQ时MessageReadPropertyFilter会重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/480294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com