1
我有幾個99.9%的時間正確運行的服務。但是,他們使用網絡和數據庫,偶爾會出現一個我沒有預料到的錯誤,使其進入代碼並導致服務崩潰。在這種情況下,重新啓動服務通常會解決問題。重大崩潰後重新啓動服務
我的服務在主代碼運行時創建一個新線程。我已經向服務類添加了錯誤處理,以捕獲並記錄此線程中的任何未處理的異常。我想知道的是,如果我可以調用OnStop,然後從服務類的OnStart重新啓動我的服務?
我使用的代碼與OnStart和OnStop位於同一個類中。我已經發布了它下面:
private void ExceptionHandler(object sender, UnhandledExceptionEventArgs args)
{
log.Append("Fatal Exception:\n" + args.ExceptionObject);
eventLog.WriteEntry(log.ToString());
log = new StringBuilder();
OnStop();
if (numberOfCrashes++ < 10)
{
Thread.Sleep(60000);
OnStart(null);
log.Append("The service has been restarted " + numberOfCrashes + " times.");
eventLog.WriteEntry(log.ToString());
log = new StringBuilder();
}
}