在致命崩溃后重新启动服务

本文关键字:重新启动 服务 崩溃 | 更新日期: 2023-09-27 18:15:30

我有几个服务在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();
        }
    }

在致命崩溃后重新启动服务

我想知道的是,如果我可以调用OnStop,然后OnStart从重新启动我的服务的服务类?

这将取决于如何实现OnStartOnStop逻辑。

例如,如果你的OnStart能够确定工作头是否已经启动,如果是,它停止并重新启动它,那么是的,你可以通过直接调用这些方法来模拟服务重启。

因此,您在OnStartOnStop上的实际代码是您问题的正确答案,这取决于您对其进行重构以满足您的需求,即在不重新启动服务的情况下在操作系统级别重新启动服务。