Compartilhar via


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

Este artigo descreve como alojar o conector do Microsoft Graph como um serviço Windows para que seja executado continuamente.

O executável do conector tem de estar sempre em execução para que a plataforma do conector possa efetuar pedidos durante pesquisas ou para realizar quaisquer operações de gestão de ligações. O executável não consumirá ativamente quaisquer recursos, exceto nas horas em que o conector está a ser pesquisado. O resto do tempo, o executável do conector ficará inativo.

Uma forma de fazer com que o conector seja executado continuamente é alojá-lo como um serviço Windows. Se o executável estiver registado como um serviço Windows, o sistema operativo tratará de iniciar o processo e reiniciá-lo se o sistema falhar.

Utilize os seguintes passos para alojar o conector como um serviço Windows:

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

  2. Procure o modelo de serviço De trabalho , selecione-o e, em seguida, selecione Seguinte.

    Captura de ecrã da página Adicionar um novo projeto com o Serviço de trabalho selecionado

  3. Atribua o nome CustomConnectorWorkerService ao projeto e selecione Seguinte.

  4. Escolha .NET Core 3.1 como a arquitetura de destino e selecione Criar.

  5. Clique com o botão direito do rato no projeto de serviço de trabalho e selecione 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 rato no projeto de serviço de trabalho e selecione Adicionar>Referência do Projeto.

  8. Selecione o projeto CustomConnector e selecione OK.

    Captura de ecrã do Gestor de Referência a mostrar CustomConnector selecionado

  9. Substitua o código no ficheiro Worker.cs pelo seguinte código.

    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 ficheiro Program.cs pelo seguinte código.

    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 da versão e crie o projeto CustomConnectorWorkerService .

    Captura de ecrã a mostrar a Configuração da versão selecionada

  12. Execute o seguinte script para registar 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 tem de ser exclusivo para cada conector exclusivo.
    • Para obter mais informações sobre contas de utilizador de serviço, veja Contas de Utilizador de Serviço.
  13. Abra services.msc e verifique se o serviço está em execução.

    Captura de ecrã de services.msc a mostrar o CustomConnector em execução

Para quaisquer problemas com o alojamento do conector, veja Resolução de problemas de erros.

Próximas etapas