应用程序池设置为 AlwaysRunning 不会自动启动托管服务

应用程序池设置为 AlwaysRunning 不会自动启动托管服务

我已将池配置为自动启动且永不休眠。我在自动启动方面遇到了问题。我的理解是,线程池工作器将在回收后启动,当发生这种情况时,我会假设应用程序入口点将被调用,但是,这似乎不起作用。

部署应用程序时,我在“IIS AspNetCore Modeule”V2 接收器下看到以下日志条目。

  1. 2022 年 1 月 28 日上午 9:25:15 - 正在运行作业:发布
  2. 2022 年 1 月 28 日上午 9:25:28 - 检测到 app_offline.htm 后,应用程序“C:<应用程序路径>”被回收。
  3. 2022 年 1 月 28 日上午 9:25:29 — 应用程序“MACHINE/WEBROOT/APPHOST//”已关闭。
  4. 2022 年 1 月 28 日上午 9:25:33 - 职位发布已完成,结果为:成功

在哪里

  1. DevOps 微服务构建 - 开始
  2. 回收(build 创建 app_offline)
  3. Api 关闭
  4. DevOps 微服务构建开始 - 成功

我很困惑,为什么没有相关的 api 启动消息,例如-应用程序'C:<path to app>'已成功启动。

需要注意的是,这是一个 .NET Core API“微服务”,不接受任何 http 请求。在代码中,启动时有此配置。

services.AddHostedService<AuthorizationMessageConsumerService>();

public class AuthorizationMessageConsumerService : BackgroundService

如果每次部署后都 ping 通 /health 端点,则服务启动。

我只能猜测 AlwaysRunning 只是创建了一个新的请求线程,但没有调用任何入口点,该入口点由传入的 http 请求 /health 调用。

我试图避免将 ping 作为构建和部署要求。有什么选择吗?或者按时间间隔和部署后设置健康 ping 是否是最佳解决方案?

IIS 配置

在此处输入图片描述

答案1

我遗漏了一点,即在 IIS 应用程序级别启用 Preload=true。这基本上会在部署或其他原因导致回收后发送一个请求来启动您的应用程序。

相关内容