.net Windows事件日志中的错误MSMQ超时

.net Windows事件日志中的错误MSMQ超时,.net,msmq,event-log,.net,Msmq,Event Log,我有一个Windows服务,它轮询MSMQ队列并将传入消息分派给处理程序。当我希望服务关闭时,它不会关闭,除非我在一段时间后强制队列的接收超时。如果我不这样做,windows服务控制器将无法终止服务&我还需要测试我的安装程序。在实践中,这不会是一个问题,因为队列将被重载。但在我的开发环境中,我的事件日志中有许多虚假的错误条目。例如: while (!Signal) { try { var msg =

我有一个Windows服务,它轮询MSMQ队列并将传入消息分派给处理程序。当我希望服务关闭时,它不会关闭,除非我在一段时间后强制队列的接收超时。如果我不这样做,windows服务控制器将无法终止服务&我还需要测试我的安装程序。在实践中,这不会是一个问题,因为队列将被重载。但在我的开发环境中,我的事件日志中有许多虚假的错误条目。例如:

while (!Signal)
        {
            try
            {
                var msg = Queue.Receive(TimeSpan.FromSeconds(1));
                if (Signal)
                {
                    EventLog.WriteEntry("LoggingHub", 
                      "Terminating QueueReader for Path [" + 
                      Queue.Path + "]", EventLogEntryType.Information);
                    return;
                }
                // etc etc etc

有没有办法关闭错误报告,因为我认为这是接收函数的合法使用?

最后,我放弃了超时方法,转而使用异步回调—使用BeginReceive和EndReceive。我能够立即停止服务,避免毫无意义地使用宝贵的资源


FWIW:我同意@John breakwell的说法,那应该是一个合法的使用场景,但如果它用虚假错误填充您的事件日志,那么它实际上毫无价值。我只能假设API变体仅适用于在确定的时间范围内预期事件的情况,即ACK或类似情况,因此可以将超时解释为协议错误。

我认为在接收上设置超时是最佳做法。我发现无限的等待时间会导致问题,因为它并不总是对错误状态做出良好的反应。短超时会限制接收不工作的时间。