Freigeben über


Hosten eines Microsoft Graph-Connectors als Windows-Dienst

In diesem Artikel wird beschrieben, wie Sie Ihren Microsoft Graph-Connector als Windows-Dienst hosten, damit er kontinuierlich ausgeführt wird.

Die ausführbare Connectordatei muss immer ausgeführt werden, damit die Connectorplattform anforderungen an sie während durchforsten oder verbindungsverwaltungsvorgängen senden kann. Die ausführbare Datei verbraucht keine Ressourcen aktiv, mit Ausnahme der Zeiten, in denen der Connector durchforstet wird. In der restlichen Zeit befindet sich die ausführbare Connector-Datei nur im Leerlauf.

Eine Möglichkeit, die ausführbare Datei des Connectors kontinuierlich auszuführen, besteht darin, sie als Windows-Dienst zu hosten. Wenn die ausführbare Datei als Windows-Dienst registriert ist, kümmert sich das Betriebssystem um das Starten des Prozesses und den Neustart, wenn das System abstürzt.

Führen Sie die folgenden Schritte aus, um den Connector als Windows-Dienst zu hosten:

  1. Klicken Sie mit der rechten Maustaste auf die Projektmappe, die das benutzerdefinierte Connectorprojekt enthält, und wählen SieNeues Projekthinzufügen> aus.

  2. Search für die Workerdienstvorlage aus, wählen Sie sie aus, und wählen Sie dann Weiter aus.

    Screenshot der Seite

  3. Nennen Sie das Projekt CustomConnectorWorkerService , und wählen Sie Weiter aus.

  4. Wählen Sie .NET Core 3.1 als Zielframework und dann Erstellen aus.

  5. Klicken Sie mit der rechten Maustaste auf das Workerdienstprojekt, und wählen Sie In Terminal öffnen aus.

  6. Führen Sie die folgenden Befehle im Terminal aus.

    dotnet add package Microsoft.Extensions.Hosting --version 6.0.0
    dotnet add package Microsoft.Extensions.Hosting.WindowsServices --version 6.0.0
    
  7. Klicken Sie mit der rechten Maustaste auf das Workerdienstprojekt, und wählen SieProjektverweishinzufügen> aus.

  8. Wählen Sie das Projekt CustomConnector und dann OK aus.

    Screenshot des Verweis-Managers mit ausgewählter Option

  9. Ersetzen Sie den Code in der Worker.cs-Datei durch den folgenden Code.

    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. Ersetzen Sie den Code in der Program.cs-Datei durch den folgenden Code.

    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. Wählen Sie die Releasekonfiguration aus, und erstellen Sie das Projekt CustomConnectorWorkerService .

    Screenshot: Ausgewählte Releasekonfiguration

  12. Führen Sie das folgende Skript aus, um den benutzerdefinierten Connector als Windows-Dienst zu registrieren und zu starten.

    $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
    

    Hinweis

    • Der Dienstname muss für jeden eindeutigen Connector eindeutig sein.
    • Weitere Informationen zu Dienstbenutzerkonten finden Sie unter Dienstbenutzerkonten.
  13. Öffnen Sie services.msc, und überprüfen Sie, ob der Dienst ausgeführt wird.

    Screenshot von

Informationen zu Problemen beim Hosten des Connectors finden Sie unter Beheben von Fehlern.

Nächste Schritte