I noticed the other day a team member was having exceptions being thrown every second when idle in a service. Digging deeper it was revealed that the MSMQ Distributor has some code that peeks into a queue to determine if to process messages in the Enterprise Library logging framework. I devised I think a better way to check for the number of messages and then process. What do you think or do you have a better way?
Snippet of offending code (generates exception when queue is empty)
using (MessageQueue msmq = CreateMessageQueue())
catch (MessageQueueException e)
if (e.MessageQueueErrorCode == MessageQueueErrorCode.IOTimeout)
empty = true;
A Better Way?
// Set the filter to only retrieve no major attributes or body
MessagePropertyFilter propFilter = new MessagePropertyFilter();
MessageQueue newQueue = new MessageQueue(queuePath, false, true, QueueAccessMode.Peek);
newQueue.MessageReadPropertyFilter = propFilter;
if(newQueue.GetAllMessages().Length > 0)