Ложные ошибки тайм-аута MSMQ в журнале событий Windows - PullRequest
0 голосов
/ 25 января 2011

У меня есть служба 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 голосов
/ 31 января 2011

В конце концов, я отказался от тайм-аута в пользу асинхронных обратных вызовов - используя BeginReceive и EndReceive.Я могу немедленно остановить службу и воздерживаться от бессмысленного использования ценных ресурсов.

FWIW: Я согласен с @John breakwell, что это должен быть законный сценарий использования, но он фактически бесполезен, если он заполняет вашрегистрация событий с ложными ошибками.Я могу только предположить, что вариант API предназначен исключительно для случаев, когда вы ожидаете событие в течение определенного периода времени (например, ACK или аналогичного), и, таким образом, может интерпретировать тайм-аут как ошибку протокола.

...