2011-01-25 43 views
0

我有一個Windows服務輪詢MSMQ隊列並將傳入消息分派給處理程序。當我希望服務關閉時,它不會,除非強制隊列的接收在一段時間後超時。如果我沒有Windows服務控制器將無法終止服務(&我還需要測試我的安裝程序)。在實踐中,這不會成爲問題,因爲隊列將負載很重。但在我的開發環境中,我的事件日誌中出現了大量虛假的錯誤條目。例如:Windows事件日誌中的虛假MSMQ超時錯誤

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 

有沒有辦法對我來說,關閉錯誤報告,因爲我認爲這是一個合法使用接收功能的?

+0

我會說設置接收超時將是一個最佳實踐。我發現無限的等待時間並不總是對錯誤狀態做出很好的反應。短暫的超時限制了接收可能失效的時間。 – 2011-01-28 01:50:24

回答

0

最後,我放棄了使用BeginReceive和EndReceive進行異步回調的超時方法。我可以立即停止服務,不要毫無意義地使用寶貴的資源。我同意@John breakwell:這應該是一個合法的使用場景,但是如果它填充了虛假錯誤的事件日誌,它實際上毫無價值。我只能假設API變體僅用於當你期望在確定的時間範圍內發生事件(即ACK或類似事件),並且因此可以將超時解釋爲協議錯誤。