Windows事件日志中的虚假MSMQ超时错误

时间:2011-01-25 04:16:38

标签: .net msmq event-log

我有一个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

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

1 个答案:

答案 0 :(得分:0)

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

FWIW:我同意@John breakwell认为这应该是一个合法的使用场景,但如果它以虚假错误填满你的事件登录,它实际上是毫无价值的。我只能假设API变体仅用于在预期的时间范围内(即ACK或类似事件)发生事件,因此可以将超时解释为协议错误。