Размещение соединителя Microsoft Graph в качестве службы Windows

В этой статье описывается размещение соединителя Microsoft Graph в качестве службы Windows, чтобы он работал непрерывно.

Исполняемый файл соединителя должен быть всегда запущен, чтобы платформа соединителя могла выполнять запросы к нему во время обхода контента или выполнения любых операций управления подключением. Исполняемый файл не будет активно потреблять ресурсы, за исключением случаев обхода соединителя. В остальное время исполняемый файл соединителя просто бездействует.

Один из способов непрерывного выполнения соединителя — разместить его в качестве службы Windows. Если исполняемый файл зарегистрирован как служба Windows, операционная система будет выполнять запуск процесса и перезапускать его в случае сбоя системы.

Чтобы разместить соединитель в качестве службы Windows, выполните следующие действия.

  1. Щелкните правой кнопкой мыши решение, содержащее проект пользовательского соединителя, и выберите Добавить>новый проект.

  2. Найдите шаблон рабочей службы , выберите его и нажмите кнопку Далее.

    Снимок экрана: страница

  3. Назовите проект CustomConnectorWorkerService и нажмите кнопку Далее.

  4. Выберите .NET Core 3.1 в качестве целевой платформы и нажмите кнопку Создать.

  5. Щелкните правой кнопкой мыши проект рабочей службы и выберите Открыть в терминале.

  6. Выполните следующие команды в терминале.

    dotnet add package Microsoft.Extensions.Hosting --version 6.0.0
    dotnet add package Microsoft.Extensions.Hosting.WindowsServices --version 6.0.0
    
  7. Щелкните правой кнопкой мыши проект рабочей службы и выберите Добавить>ссылку на проект.

  8. Выберите проект CustomConnector и нажмите кнопку ОК.

    Снимок экрана: диспетчер ссылок с выбранным элементом CustomConnector

  9. Замените код в файле Worker.cs следующим кодом.

    using CustomConnector.Server;
    
    using Microsoft.Extensions.Hosting;
    using Microsoft.Extensions.Logging;
    
    using System.Threading;
    using System.Threading.Tasks;
    
    namespace CustomConnectorWorkerService
    {
        public class Worker : BackgroundService
        {
            public Worker(ILogger<Worker> logger)
            {
                var server = new ConnectorServer();
                server.StartLogger();
                server.Start();
            }
    
            protected override async Task ExecuteAsync(CancellationToken stoppingToken)
            {
                while (!stoppingToken.IsCancellationRequested)
                {
                    await Task.Delay(1000);
                }
            }
        }
    }
    
  10. Замените код в файле Program.cs следующим кодом.

    using Microsoft.Extensions.DependencyInjection;
    using Microsoft.Extensions.Hosting;
    
    namespace CustomConnectorWorkerService
    {
        public class Program
        {
            public static void Main(string[] args)
            {
                CreateHostBuilder(args).Build().Run();
            }
    
            public static IHostBuilder CreateHostBuilder(string[] args) =>
                Host.CreateDefaultBuilder(args)
                .UseWindowsService()
                    .ConfigureServices((hostContext, services) =>
                    {
                        services.AddHostedService<Worker>();
                    });
        }
    }
    
  11. Выберите конфигурацию выпуска и выполните сборку проекта CustomConnectorWorkerService .

    Снимок экрана: выбранная конфигурация выпуска

  12. Выполните следующий скрипт, чтобы зарегистрировать и запустить настраиваемый соединитель в качестве службы Windows.

    $ServiceName = "CustomConnector"
    $ExePath = "<Full path of CustomConnectorWorkerService.exe from above build>"
    # Create a service with the given executable. This just creates an entry for this service.
    sc.exe create $ServiceName binPath="$ExePath" start="delayed-auto"
    # Set the service to run under a virtual account NT Service\<ServiceName>. Optionally skip this step to run the service under LOCAL SYSTEM account
    sc.exe config $ServiceName obj="NT Service\$ServiceName"
    # Restarts service after 5 minutes on first, second and third failures and resets error after 1 day
    sc.exe failureflag $ServiceName 1
    sc.exe failure $ServiceName reset= 86400 actions= restart/300000/restart/300000/restart/300000
    sc.exe start $ServiceName
    

    Примечание.

    • Имя службы должно быть уникальным для каждого уникального соединителя.
    • Дополнительные сведения об учетных записях пользователей службы см. в разделе Учетные записи пользователей службы.
  13. Откройте services.msc и убедитесь, что служба запущена.

    Снимок экрана: файл services.msc с запущенным CustomConnector

Сведения о проблемах с размещением соединителя см. в статье Устранение ошибок.

Дальнейшие действия