web-dev-qa-db-ja.com

Windowsサービスとしての.Net Core 2.0コンソールアプリ

.Net Core Consoleアプリケーションをサービスとして設定しようとしています。 .Net標準を使用して、私は通常Topshelfを使用しますが、これは.Net Coreをサポートしていないようです。

Topshelfはオプションではないため、.Net Core ConsoleアプリケーションをWindowsサービスとして実行するにはどうすればよいですか?

https://github.com/PeterKottas/DotNetCore.WindowsService にアクセスできましたが、これは実稼働環境の実行可能な代替物ですか?

8
Matthew P.

いくつかのオプションがあります。

  1. Windows Compatibility Pack を使用すると、ServiceBaseおよび関連するAPIが.NET Coreに戻されるため、TopShelfはそのまま使用できます。 (このパックは執筆時点でRCにあり、約1週間後に予定されている安定版リリースが予定されています)

  2. TopShelf は、新しい.NET Coreバージョンの互換性パック/ Windows互換性に基づいて、.NET Coreをサポートするようになりました。

  3. https://github.com/PeterKottas/DotNetCore.WindowsService は多くのユーザーに有効なようですので、試してみることをお勧めします。

  4. (3)のライブラリは、 DasMulli.Win32.ServiceUtils に関連する素晴らしいAPIであり、自己完結型の.NETコアアプリケーションを運用環境に展開できるようにするために私たちが書いたものです。これまでのところ、問題は発生していません。

  5. Non-Sucking Service Manager など、Windowsサービスインフラストラクチャを抽象化し、任意のプログラムを実行する他のサービスホスト。これは、停止コマンドに反応して正常にシャットダウンする良い方法を提供しない場合があることに注意してください。

9
Martin Ullrich

.netコアでは、サービスとして実行するオプションはありません。ただし、コンソールアプリケーションをコンテナ化する場合、コンテナはどこにでも展開でき、サービスとして実行するのと同じです。 .NET Core 2.1以降では、HostおよびHostBuilderを使用して、コンソールアプリでDI、ロギング、グレースフルシャットダウンなどを管理できます。見て:

。NET Coreコンソールアプリケーションでのホスティングサービス

2
Peter

当社では Non-Sucking Service Manager を使用していますが、これまでのところ問題はありませんでしたが、ご覧ください。

0
kuskmen