Héberger un connecteur Microsoft Graph en tant que service Windows

Cet article explique comment héberger votre connecteur Microsoft Graph en tant que service Windows afin qu’il s’exécute en continu.

L’exécutable du connecteur doit toujours être en cours d’exécution afin que la plateforme du connecteur puisse lui envoyer des requêtes pendant les analyses ou effectuer des opérations de gestion des connexions. L’exécutable ne consommera pas activement de ressources, à l’exception des moments où le connecteur est analysé. Le reste du temps, l’exécutable du connecteur est simplement inactif.

L’une des façons de rendre l’exécutable du connecteur exécuté en continu consiste à l’héberger en tant que service Windows. Si l’exécutable est inscrit en tant que service Windows, le système d’exploitation se charge de démarrer le processus et de le redémarrer en cas de blocage du système.

Procédez comme suit pour héberger le connecteur en tant que service Windows :

  1. Cliquez avec le bouton droit sur la solution qui contient le projet de connecteur personnalisé, puis sélectionnez Ajouter un>nouveau projet.

  2. Recherche pour le modèle de service Worker, sélectionnez-le, puis choisissez Suivant.

    Capture d’écran de la page Ajouter un nouveau projet avec le service Worker sélectionné

  3. Nommez le projet CustomConnectorWorkerService et choisissez Suivant.

  4. Choisissez .NET Core 3.1 comme framework cible, puis choisissez Créer.

  5. Cliquez avec le bouton droit sur le projet de service Worker et choisissez Ouvrir dans le terminal.

  6. Exécutez les commandes suivantes dans le terminal.

    dotnet add package Microsoft.Extensions.Hosting --version 6.0.0
    dotnet add package Microsoft.Extensions.Hosting.WindowsServices --version 6.0.0
    
  7. Cliquez avec le bouton droit sur le projet de service Worker et sélectionnez Ajouter une>référence de projet.

  8. Sélectionnez le projet CustomConnector et choisissez OK.

    Capture d’écran du Gestionnaire de références montrant CustomConnector sélectionné

  9. Remplacez le code dans le fichier Worker.cs par le code suivant.

    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. Remplacez le code dans le fichier Program.cs par le code suivant.

    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. Sélectionnez la configuration Release et générez le projet CustomConnectorWorkerService .

    Capture d’écran montrant la configuration release sélectionnée

  12. Exécutez le script suivant pour inscrire et démarrer le connecteur personnalisé en tant que service 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
    

    Remarque

    • Le nom du service doit être unique pour chaque connecteur unique.
    • Pour plus d’informations sur les comptes d’utilisateur de service, consultez Comptes d’utilisateur de service.
  13. Ouvrez services.msc et vérifiez que le service est en cours d’exécution.

    Capture d’écran de services.msc montrant le CustomConnector en cours d’exécution

Pour tout problème lié à l’hébergement du connecteur, consultez Résolution des erreurs.

Étapes suivantes