Kestrel 是否由 IIS AspNetCore 模块立即启动?

Is Kestrel started immediately by IIS AspNetCore module?

我们在本地面临一个问题,当使用 IIS Express 时,Startup class 的方法在应用程序启动后立即被调用,即使没有启动浏览器。 (这是 Db 迁移)

但是,当应用程序部署到 IIS 时 Startup class 仅在首次请求站点后运行。

是IIS/AspNetCore模块的问题吗?如果是,除了在部署后进行查询之外,是否可以强制启动 Kestrel?

好的,魔法由多个parts:

组成

首先,我们应该有一个运行宁应用程序池。这是通过将池的启动模式设置为 AlwaysRunning(默认为 OnDemand)来配置的。也请参阅此 question

其次,我们必须将站点设置Preload Enabled设置为true。 (站点 -> 高级设置)。

第三,我们在web.config文件中指定applicationInitialization部分。

article 说明如何使用 PowerShell 执行这些操作。


注意:我需要应用程序预热,因为我 运行 在应用程序启动时迁移数据库。当我们部署到多个实例时,我们使用滚动部署来避免并发迁移。

过程大致如下:

  • 停止所有实例
  • 按顺序为每个实例部署新版本并等待一段时间

它引入了较短的服务停机时间,不过现在对我们来说没问题。