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 执行这些操作。
注意:我需要应用程序预热,因为我 运行 在应用程序启动时迁移数据库。当我们部署到多个实例时,我们使用滚动部署来避免并发迁移。
过程大致如下:
- 停止所有实例
- 按顺序为每个实例部署新版本并等待一段时间
它引入了较短的服务停机时间,不过现在对我们来说没问题。
我们在本地面临一个问题,当使用 IIS Express 时,Startup
class 的方法在应用程序启动后立即被调用,即使没有启动浏览器。 (这是 Db 迁移)
但是,当应用程序部署到 IIS 时 Startup
class 仅在首次请求站点后运行。
是IIS/AspNetCore模块的问题吗?如果是,除了在部署后进行查询之外,是否可以强制启动 Kestrel?
好的,魔法由多个parts:
组成首先,我们应该有一个运行宁应用程序池。这是通过将池的启动模式设置为 AlwaysRunning
(默认为 OnDemand
)来配置的。也请参阅此 question。
其次,我们必须将站点设置Preload Enabled
设置为true
。 (站点 -> 高级设置)。
第三,我们在web.config文件中指定applicationInitialization部分。
此 article 说明如何使用 PowerShell 执行这些操作。
注意:我需要应用程序预热,因为我 运行 在应用程序启动时迁移数据库。当我们部署到多个实例时,我们使用滚动部署来避免并发迁移。
过程大致如下:
- 停止所有实例
- 按顺序为每个实例部署新版本并等待一段时间
它引入了较短的服务停机时间,不过现在对我们来说没问题。