アプリケーションプールが AlwaysRunning に設定されていても、ホストされたサービスは自動的に開始されません。

アプリケーションプールが AlwaysRunning に設定されていても、ホストされたサービスは自動的に開始されません。

プールを自動起動し、スリープしないように構成しました。自動起動に問題があります。リサイクル後にスレッド プール ワーカーが起動され、そのときにアプリケーション エントリ ポイントが呼び出されると想定しているのですが、動作していないようです。

アプリケーションがデプロイされると、「IIS AspNetCore Modeule」V2 シンクの下に次のログ エントリが表示されます。

  1. 2022/1/28 午前 9:25:15 - 実行中のジョブ: リリース
  2. 2022 年 1 月 28 日午前 9 時 25 分 28 秒 - アプリケーション「C:<アプリへのパス>」は、app_offline.htm を検出した後にリサイクルされました。
  3. 2022 年 1 月 28 日午前 9 時 25 分 29 秒 - アプリケーション「MACHINE/WEBROOT/APPHOST//」がシャットダウンしました。
  4. 2022/1/28 9:25:33 AM - ジョブリリースが完了しました。結果: 成功

どこ

  1. DevOps マイクロサービス ビルド - 開始
  2. リサイクル(ビルドにより app_offline が作成される)
  3. API シャットダウン
  4. DevOps マイクロサービス ビルド開始 - 成功

「アプリケーション 'C:<アプリへのパス>' が正常に起動しました」などの関連する API 起動メッセージがないことに困惑しています。

これは、HTTP リクエストを一切受け取らない .NET Core API「マイクロサービス」であることに注意することが重要です。コードでは、スタートアップにこの構成があります。

services.AddHostedService<AuthorizationMessageConsumerService>();

そして

public class AuthorizationMessageConsumerService : BackgroundService

すべてのデプロイメント後に /health エンドポイントが ping されると、サービスが起動します。

AlwaysRunning は新しいリクエスト スレッドを作成しただけで、着信 http リクエスト /health によって呼び出されるエントリ ポイントを呼び出さないとしか推測できません。

ビルドとデプロイメントの要件として ping を実行しないようにしています。何かオプションはありますか? それとも、一定間隔でヘルス ping を設定し、デプロイメント後に実行するのが最善の解決策でしょうか?

IIS 構成

ここに画像の説明を入力してください

答え1

私が見逃していた唯一のことは、IIS アプリケーション レベルで Preload Enabled=true が設定されていたことです。これは基本的に、デプロイメントやその他の理由でリサイクルされた後にアプリを起動するための要求を送信することになります。

関連情報