Как перезапустить зависимый сервис, если основной сервис потерпел неудачу и восстановился на верхней полке - PullRequest
0 голосов
/ 02 июня 2018

У меня есть служба Windows, созданная с помощью topshelf.Когда-нибудь эта служба будет остановлена.Поэтому я хочу, чтобы он был автоматически перезапущен.Итак, у нас есть опция восстановления на верхней полке.Теперь моя проблема заключается в том, что когда эта служба восстанавливается после сбоя, я должен иметь возможность перезапустить другую службу, потому что моя эта служба потерпела неудачу.Как мне этого добиться?

1 Ответ

0 голосов
/ 02 июня 2018

Прежде всего, вы должны иметь зависимость службы от этой другой службы, чтобы убедиться, что она работает.

При запуске служба должна отправить команду этой службе для перезапуска своей логики.

Чтобы сервис Topshelf мог принимать команды, класс сервиса должен реализовать ServiceCustomCommand или настроить его следующим образом:

HostFactory.New(x =>
{
    x.Service<MyService>(sc =>
    {
        sc.ConstructUsing(() => new MyService());

        …

        // Handle custom commands
        sc.WhenCustomCommandReceived((service, control, command) =>
            service.CustomCommand(control, command));
    });
});

Чтобы отправить команду в сервис, вы можете использоватьServiceController. ExecuteCommand:

using (var thatService = new ServiceController("ThatService"))
{
    thatService.ExecuteCommand(0);
}

Если у вас нет команды для этой службы, вы также можете использовать ServiceControllerStop и Start служба:

using (var thatService = new ServiceController("ThatService"))
{
    thatService.Stop();
    SpinWait.SpinUntil(() =>
        {
            thatService.Refresh();
            return thatService.Status == ServiceControllerStatus.Stopped;
        });
    thatService.Start();
    SpinWait.SpinUntil(() =>
        {
            thatService.Refresh();
            return thatService.Status == ServiceControllerStatus.Running;
        });
}

Или ваше восстановление должно быть командой, в которой вы перезапускаете эту службу и запускаете эту службу.

...