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