Compartilhar via


Hospedar um conector do Microsoft Graph como um serviço Windows

Este artigo descreve como hospedar seu conector do Microsoft Graph como um serviço windows para que ele seja executado continuamente.

O executável do conector deve estar sempre em execução para que a plataforma do conector possa fazer solicitações durante rastreamentos ou para executar quaisquer operações de gerenciamento de conexão. O executável não consumirá ativamente nenhum recurso, exceto para os momentos em que o conector está sendo rastreado. O restante do tempo, o executável do conector ficará apenas ocioso.

Uma maneira de fazer o conector executável ser executado continuamente é hospedá-lo como um serviço windows. Se o executável for registrado como um serviço Windows, o sistema operacional cuidará de iniciar o processo e reiniciá-lo se o sistema falhar.

Use as seguintes etapas para hospedar o conector como um serviço windows:

  1. Clique com o botão direito do mouse na solução que contém o projeto do conector personalizado e selecione Adicionar>Novo projeto.

  2. Pesquisa para o modelo de serviço do Trabalho, selecione-o e escolha Avançar.

    Captura de tela da página Adicionar um novo projeto com o serviço Worker selecionado

  3. Nomeie o projeto CustomConnectorWorkerService e escolha Avançar.

  4. Escolha .NET Core 3.1 como a estrutura de destino e escolha Criar.

  5. Clique com o botão direito do mouse no projeto de serviço do trabalhador e escolha Abrir no Terminal.

  6. Execute os seguintes comandos no terminal.

    dotnet add package Microsoft.Extensions.Hosting --version 6.0.0
    dotnet add package Microsoft.Extensions.Hosting.WindowsServices --version 6.0.0
    
  7. Clique com o botão direito do mouse no projeto de serviço de trabalho e selecione Adicionar>Referência de Projeto.

  8. Selecione o projeto CustomConnector e escolha OK.

    Captura de tela do Gerenciador de Referência mostrando CustomConnector selecionado

  9. Substitua o código no arquivo Worker.cs pelo código a seguir.

    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. Substitua o código no arquivo Program.cs pelo código a seguir.

    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. Selecione a configuração de versão e crie o projeto CustomConnectorWorkerService .

    Captura de tela mostrando a configuração de versão selecionada

  12. Execute o script a seguir para registrar e iniciar o conector personalizado como serviço 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
    

    Observação

    • O nome do serviço deve ser exclusivo para cada conector exclusivo.
    • Para obter mais informações sobre contas de usuário de serviço, consulte Contas de Usuário do Serviço.
  13. Abra services.msc e verifique se o serviço está em execução.

    Captura de tela de services.msc mostrando o CustomConnector em execução

Para obter problemas com a hospedagem do conector, consulte Solução de problemas de erros.

Próximas etapas