Compartir a través de


Hospedaje de un conector de Microsoft Graph como servicio de Windows

En este artículo se describe cómo hospedar el conector de Microsoft Graph como un servicio de Windows para que se ejecute continuamente.

El ejecutable del conector debe estar siempre en ejecución para que la plataforma del conector pueda realizar solicitudes durante los rastreos o para realizar cualquier operación de administración de conexiones. El ejecutable no consumirá activamente ningún recurso, excepto en los momentos en que se rastrea el conector. El resto del tiempo, el ejecutable del conector estará inactivo.

Una manera de hacer que el ejecutable del conector se ejecute continuamente es hospedarlo como un servicio de Windows. Si el ejecutable está registrado como un servicio de Windows, el sistema operativo se encargará de iniciar el proceso y reiniciarlo si el sistema se bloquea.

Siga estos pasos para hospedar el conector como servicio de Windows:

  1. Haga clic con el botón derecho en la solución que contiene el proyecto de conector personalizado y seleccione Agregar>nuevo proyecto.

  2. Búsqueda para la plantilla Servicio de trabajo, selecciónela y, a continuación, elija Siguiente.

    Captura de pantalla de la página Agregar un nuevo proyecto con el servicio de trabajo seleccionado

  3. Asigne al proyecto el nombre CustomConnectorWorkerService y elija Siguiente.

  4. Elija .NET Core 3.1 como plataforma de destino y elija Crear.

  5. Haga clic con el botón derecho en el proyecto de servicio de trabajo y elija Abrir en terminal.

  6. Ejecute los siguientes comandos en el terminal.

    dotnet add package Microsoft.Extensions.Hosting --version 6.0.0
    dotnet add package Microsoft.Extensions.Hosting.WindowsServices --version 6.0.0
    
  7. Haga clic con el botón derecho en el proyecto de servicio de trabajo y seleccione Agregar>referencia de proyecto.

  8. Seleccione el proyecto CustomConnector y elija Aceptar.

    Captura de pantalla del Administrador de referencias que muestra CustomConnector seleccionado

  9. Reemplace el código del archivo Worker.cs por el código siguiente.

    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. Reemplace el código del archivo Program.cs por el código siguiente.

    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. Seleccione la configuración release y compile el proyecto CustomConnectorWorkerService .

    Captura de pantalla que muestra la configuración de versión seleccionada

  12. Ejecute el siguiente script para registrar e iniciar el conector personalizado como servicio de 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
    

    Nota:

    • El nombre del servicio debe ser único para cada conector único.
    • Para obtener más información sobre las cuentas de usuario de servicio, consulte Cuentas de usuario de servicio.
  13. Abra services.msc y compruebe que el servicio se está ejecutando.

    Captura de pantalla de services.msc en la que se muestra la ejecución de CustomConnector

Para ver cualquier problema con el hospedaje del conector, consulte Solución de problemas de errores.

Pasos siguientes