Windowsサービスとしての.NET Core Worker

.NET Core 3.0では、ワーカーサービスと呼ばれる新しいタイプのアプリケーションテンプレートを導入しています。 このテンプレートは、.NET Coreで長時間実行されるサービスを作成するための出発点を提供するように設計されています。 このチュートリアルでは、ワーカーを作成し、Windowsサービスとして実行します。




作成ワーカー


ご注意 プレリリースバージョンでは、ワーカーテンプレートはWebテンプレートと同じメニューにあります。 これは将来のリリースで変更されます。 新しいプロジェクトを作成するために、ウィザードにワーカーサービステンプレートを直接配置する予定です。


Visual Studioでワーカーを作成する


画像


画像


画像


コマンドラインでワーカーを作成する


dotnet new worker実行します


画像


Windowsサービスとして実行


Windowsサービスとして開始するには、ワーカーがServiceBase .NETタイプからの開始信号と停止信号を確認し、Windowsサービスシステムを.NETアプリケーションに接続する必要があります。 これを行うには、次のものが必要です。


Microsoft.Extensions.Hosting.WindowsServices NuGetパッケージを追加する


画像


HostBuilderでHostBuilderにUseServiceBaseLifetime呼び出しを追加します


 public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseServiceBaseLifetime() .ConfigureServices(services => { services.AddHostedService<Worker>(); }); } 

このメソッドはいくつかのことを行います。 まず、アプリケーションが実際にWindowsサービスとして機能するかどうかをチェックし、そうでない場合は、noopsを実行します。これにより、ローカルまたはWindowsサービスとして実行するときにこのメソッドを安全に呼び出すことができます。


次に、 ServiceBaseLifetimeを使用するようにホストを構成します。 ServiceBaseLifetime連携して、Windowsサービスとして起動するアプリケーションのライフタイムを制御するのに役立ちます。 これは、CTL + Cなどの信号を処理する標準のConsoleLifetimeをオーバーライドします。


ワーカーをインストール


ServiceBaseLifetimeを使用してワーカーを取得したら、設定する必要があります。


まず、アプリケーションを公開しましょう。 Windowsサービスをインプレースでインストールします。つまり、サービスが開始されるたびに実行可能ファイルがブロックされます。 公開は、サービスの開始に必要なすべてのファイルが1か所にあり、インストールの準備ができていることを確認するための良い方法です。


 dotnet publish -oc:\code\workerpub 

次に、adminコマンドラインでscユーティリティを使用できます。


 sc create workertest binPath=c:\code\workerpub\WorkerTest.exe 

例:


画像


セキュリティに関する注意:このコマンドは、ローカルシステムとしてサービスを開始しますが、これは必要なものではありません 代わりに、サービスアカウントを作成し、このアカウントとしてWindowsサービスを開始する必要があります。 ここではこれについては説明しませんが、ASP.NETのドキュメントがいくつかあります: https : //docs.microsoft.com/en-us/aspnet/core/host-and-deploy/windows-service?view=aspnetcore- 2.2


ロギング


ログシステムにはイベントログサービスがあり、Windowsイベントログにログメッセージを直接送信できます。 イベントログを入力するには、 Microsoft.Extensions.Logging.EventLogパッケージを追加し、 Program.cs変更します。


 public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureLogging(loggerFactory => loggerFactory.AddEventLog()) .ConfigureServices(services => { services.AddHostedService<Worker>(); }); 

さらなる仕事


次のプレビューでは、Windowsサービスでのワーカーの使用を改善する予定です。


  1. UseWindowsServiceBaseLifetimeの名前をUseWindowsServiceに変更します
  2. Windowsサービスとして起動時のイベントログとの自動および改善された統合を追加します。

おわりに


新しいテンプレートを試してみて、その仕組みを知りたいと思っています。 エラーメッセージや提案はこちらから送信できます: https : //github.com/aspnet/AspNetCore/issues/new/choose


アバター
グレンコンドロン


Source: https://habr.com/ru/post/J446512/


All Articles