如何崩溃以获得Windows服务恢复的“后续失败”

时间:2016-08-12 14:03:54

标签: c# service windows-services

我们有一个用C#编写的Windows服务,它基本上是在某个端口上启动Web API。该服务配置为在第一次故障和第二次故障时重新启动。 “后续失败”设置为“不采取行动”。 如果可能使用此端口,则服务将因未处理的异常而崩溃,并且在我们未处理的异常回调中,我们将转储文件写入某个应用程序目录。无论出于何种原因,Windows一直反复重启服务,即使它已多次崩溃。我们的服务结构如下:

public class WinService : ServiceBase
{
    private WebApiHostWrapper _apiHost;
    private Thread _workerThread;

    public WinService()
    {
        InitializeComponent();
        ServiceName = "MyService";
        // register handler for writing dumpfiles
        AppDomain.CurrentDomain.UnhandledException += UnhandledExceptions.DomainUnhandledException; 
    }

    protected override void OnStart(string[] args)
    {
        _workerThread = new Thread(InternalStart) { Name = "StartupThread" };
        _workerThread.Start(args);
    }

    private void InternalStart(object args)
    {
        if (null == _service)
        {
            Thread.MemoryBarrier();
            _apiHost= new WebApiHostWrapper();
            _apiHost.Start((string[])args); // exception here
        }
    }

    protected override void OnStop()
    {
        if (null != _workerThread)
        {
            _apiHost.Dispose();
            _apiHost= null;
            if (!_workerThread.Join(5000))
            {
                _workerThread.Abort();
            }
            Thread.MemoryBarrier();
            _workerThread = null;
        }
    }

在Windows事件日志中,我看到4个条目。

  • 服务已成功启动。 (来源:MyService)
  • Applicatio .... stacktrace etc.(来源:.NET Runtime)
  • 错误的应用程序名称... dll和exe名称(来源:应用程序错误)
  • 故障桶,输入0 ....(来源:Windows错误报告)

在端口已在使用的情况下,这会导致服务一次又一次崩溃,使系统充满转储文件。 Windows将始终独立于设置重新启动服务。有没有一种特殊的方法如何崩溃以便考虑“后续故障”而不是重新启动服务?

1 个答案:

答案 0 :(得分:-1)

我发现只导致“第一次失败”的问题被执行了。我们将“重置失败计数后”设置为0天。将此值设置为1后,服务崩溃了2次,然后不再重新启动。

来源:

https://social.technet.microsoft.com/Forums/windows/en-US/3db76753-4607-4a20-97a0-790c73e379cc/the-actions-after-system-service-failure?forum=winserver8gen

Clarification on Windows Service Recovery Actions Settings

http://www.happysysadm.com/2011/12/understanding-windows-services-recovery.html