私の会社 (Shortbar) は、gRPC で HOLMS というホテル管理システムのアプリケーション サーバーを構築しています。セットアップは次のとおりです。
- HOLMS.Application は、サーバーの実際の作業を行う .NET クラス ライブラリ (アセンブリ) です。
- HOLMS.Application.ConsoleRunner は、HOLMS.Application をホストする C# コンソール アプリケーションです。コンソール ランナーは、(1) 便宜上 (質問で言及されている) 開発者によって使用されるほか、(2) コンテナー ランタイム (Amazon ECS など) がジョブ制御/スケーリングを実装する Docker コンテナー内で実行される運用シナリオによっても使用されます。単一のスタンドアロンのステートレス プロセスとしての実行、高速な起動/シャットダウン、環境変数の構成インジェクションなど、「12 要素アプリ」のガイドラインに従います。システムは stdout にログを記録しますが、これは排出されますが、stdout は本番環境 (例: Sumo、logstash など) で排出されます。これが、SaaS マルチテナント ソリューションが本番環境に移行する方法です。
- HOLMS.Application.ServiceRunner は、HOLMS.Application を Windows サービスにパッケージ化します。これは、顧客の IT グループがサービスを自分で実行する従来のオンプレミスの状況に対応します。このパッケージは、構成に Windows レジストリを使用し、起動/シャットダウン/再起動を Windows サービス ジョブ制御に依存します。Windows イベント ログに記録されます。
ConsoleRunner と ServiceRunner は、それぞれ約 200 行のコードです。ほとんどの場合、アプリケーション パッケージをラップして呼び出すだけです。
お役に立てれば。