2009-10-19 109 views
0

我在C#中設計了一個Windows服務,它持續運行併產生三個線程。 第一個線程每15秒運行一次。第二個線程每分鐘運行一次。 而且thirs只運行一次。Windows服務停止的原因

我的問題是,這個Windows服務以某種方式只是在幾天後停止。停止當天在事件日誌中沒有任何記錄,並且它沒有在日誌文件中寫入任何內容。

我想知道什麼是Windows服務突然停止的各種原因。 並且此服務不在我的DEV框中,它位於QA服務器上。

希望它有道理!

回答

2

您的某個線程可能有一個未處理的異常 - 自.NET 2.0以來,未處理的異常將像這樣突然中止此過程。確保你在線程上運行的任何東西都有一個catch塊來處理錯誤(日誌,吞下,編組到另一個線程,不管)。你可以暫時阻止這種行爲,通過增加(例如,恢復到pre-.NET 2.0行爲)以下的爲您服務的.exe.config文件與:

<configuration> 
    <runtime> 
    <legacyUnhandledExceptionPolicy enabled="1" /> 
    </runtime> 
</configuration> 

但不依賴於它 - 它可以被移除在未來的.NET發行版中(沒有檢查過4.0,它可能已經不存在了)。

+0

這是正確的。每個線程*必須*有一個try/catch塊來捕獲任何'Exception',並優雅地處理失敗(如果沒有其他適用的話,則記錄到事件日誌是一個很好的解決方案)。否則,任何線程中的未處理異常將會終止整個服務。 – 2009-10-19 22:55:03

+1

如果您沒有使用failstop日誌記錄(即,日誌記錄到事件日誌可能會引發權限),請確保您的錯誤處理代碼也具有try/catch,否則日誌失敗也可能會導致此過程失敗。 – nitzmahone 2009-10-19 23:04:57

+0

@Daniel Pryden:線程中的異常是否會被AppDomain.UnhandledException處理程序捕獲?或者這不是一個可靠的方法? – 2009-10-19 23:17:41