2013-04-25 69 views
0

我在C#中有一個Windows服務。運行1-2天后(不是特定的),服務停止(它實際上不停止,但它沒有處理任何東西,服務狀態仍然是「開始」,我需要手動重啓服務,然後再次運行)。「外部組件引發異常」

記錄的異常是「外部組件已引發異常」。這發生在第三方控制中。

我想要的服務,持續,沒有任何停頓,在生產中沒有一個是要檢查服務是否是最新/處理或沒有,除非特定功能停止。

我有所有TRY..CATCH到位。

任何建議,即使發生上述錯誤,我如何確保服務仍在繼續?

+0

首先,記錄整個異常。記錄'ex.ToString()',而不僅僅是'ex.Message'。幾乎肯定有一個內在的例外,告訴你究竟發生了什麼,以及在哪裏。 – 2013-10-18 20:00:05

回答

0

改爲使用此try-catch結構。如果RestartService失敗,你可以停止你的服務一起

public static void RestartService(string serviceName, int timeoutMilliseconds) 
{ 
    ServiceController service = new ServiceController(serviceName); 
    try 
    { 
    int millisec1 = Environment.TickCount; 
    TimeSpan timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds); 

    service.Stop(); 
    service.WaitForStatus(ServiceControllerStatus.Stopped, timeout); 

    // count the rest of the timeout 
    int millisec2 = Environment.TickCount; 
    timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds - (millisec2-millisec1)); 

    service.Start(); 
    service.WaitForStatus(ServiceControllerStatus.Running, timeout); 
    } 
    catch 
    { 
    // ... 
    } 
} 

try{ 
}catch{ 
} 

http://www.java2s.com/Code/CSharp/Language-Basics/Usethecatchallcatchstatement.htm

+0

感謝您的回覆..但我已經在帖子中提到try..catch已經到位...有什麼更好的建議? – SAM 2013-04-25 08:06:32

0

你可能想嘗試做這樣的事情在你的catch塊。代碼示例here