Microsoft Graph コネクタを Windows サービスとしてホストする

この記事では、Microsoft Graph コネクタを Windows サービスとしてホストして継続的に実行する方法について説明します。

コネクタプラットフォームがクロール中に要求を行ったり、接続管理操作を実行したりできるように、コネクタ実行可能ファイルは常に実行されている必要があります。 実行可能ファイルは、コネクタがクロールされている時間を除き、リソースをアクティブに使用しません。 残りの時間では、コネクタ実行可能ファイルはアイドル状態になります。

コネクタの実行可能ファイルを継続的に実行する方法の 1 つは、Windows サービスとしてホストすることです。 実行可能ファイルが Windows サービスとして登録されている場合、オペレーティング システムはプロセスを開始し、システムがクラッシュした場合に再起動します。

コネクタを Windows サービスとしてホストするには、次の手順に従います。

  1. カスタム コネクタ プロジェクトを含むソリューションを右クリックし、[新しいプロジェクト追加]> を選択します。

  2. Worker サービス テンプレートのSearchを選択し、[次へ] を選択します。

    Worker サービスが選択された [新しいプロジェクトの追加] ページのスクリーンショット

  3. プロジェクトに CustomConnectorWorkerService という名前を付け、[ 次へ] を選択します。

  4. ターゲット フレームワークとして [.NET Core 3.1 ] を選択し、[ 作成] を選択します。

  5. ワーカー サービス プロジェクトを右クリックし、[ ターミナルで開く] を選択します。

  6. ターミナルで次のコマンドを実行します。

    dotnet add package Microsoft.Extensions.Hosting --version 6.0.0
    dotnet add package Microsoft.Extensions.Hosting.WindowsServices --version 6.0.0
    
  7. ワーカー サービス プロジェクトを右クリックし、[プロジェクト参照追加]> を選択します。

  8. CustomConnector プロジェクトを選択し、[OK] を選択します

    CustomConnector が選択されている参照マネージャーのスクリーンショット

  9. Worker.cs ファイル内のコードを次のコードに置き換えます。

    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. Program.cs ファイル内のコードを次のコードに置き換えます。

    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. リリース構成を選択し、CustomConnectorWorkerService プロジェクトをビルドします。

    [リリース] 構成が選択されていることを示すスクリーンショット

  12. 次のスクリプトを実行して、カスタム コネクタを 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
    

    注:

    • サービス名は、一意のコネクタごとに一意である必要があります。
    • サービス ユーザー アカウントの詳細については、「 サービス ユーザー アカウント」を参照してください。
  13. services.msc を開き、サービスが実行されていることを確認します。

    CustomConnector が実行されている services.msc のスクリーンショット

コネクタのホストに関する問題については、「 エラーのトラブルシューティング」を参照してください。

次の手順