尽管已配置所有设置,但 IIS 应用程序初始化未运行

尽管已配置所有设置,但 IIS 应用程序初始化未运行

最终目标是,每当我的应用程序池被回收时(每次我发布网站更新时都会发生这种情况),我的网站都会被访问一次以“预热”。通常,回收后的第一次访问需要 2.5 秒,然后后续访问只需要 0.5 秒,因此每次更新后都需要访问一次。我想自动执行此操作,看来 Windows 应用程序初始化功能是实现此目的的方法。

问题是,启用此功能后,重新启动应用程序池(或重新启动任何程序)时,我看不到任何访问我网站的访问日志。似乎应用程序初始化功能根本不起作用。我没有在系统事件日志中看到任何错误,也没有看到任何进一步排除故障的方法。


环境如下:

  • Windows 服务器 2019
  • IIS 10(具有所有需要的角色/功能)
  • ASP.NET Core 3.1


以下是我配置的内容(使用IIS 8.0 应用程序初始化指导):

  • Windows 中已安装“应用程序初始化”功能/角色
  • 应用程序池:
    • .NET CLR 版本:无托管代码(我也尝试过 v4.0)
    • 托管管道模式:集成
    • 立即启动应用程序池:已启用
    • 启动模式:AlwaysRunning
    • 空闲超时(分钟):0
    • 常规时间间隔(分钟):0
  • 地点:
    • 仅 HTTPS(我也尝试过添加 HTTP)
    • 已启用预加载:True
  • applicationHost.conf 文件system.webServer/applicationInitialization部分: system.webServer/applicationInitialization


故障排除:

  • 我已重新启动站点/应用程序池/服务/服务器
  • 我已经尝试了该system.webServer/applicationInitialization部分中的各种设置,并将其移动到 web.config
  • 我注意到globalModulesapplicationHost.config 文件的部分中有这个,但我浏览到该文件夹​​时发现它是空的。我本以为里面会有一些 dll 文件,包括 warmup.dll:
<add name="ApplicationInitializationModule" image="%windir%\System32\inetsrv\warmup.dll" />

答案1

如果您的网站使用数据库,则可能存在问题,大多数情况下仅在第一次请求时才建立与数据库的连接,那时也会进行数据库版本检查,如果需要一段时间,您可以执行此操作,检查回收后连接是否仍然处于活动状态,如果不处于活动状态,请使其从池启动,这应该会有所帮助。

(自动翻译,请忽略拼写错误)

答案2

似乎 IIS 应用程序初始化功能和 ASP.NET Core 3.1 站点之间一定存在一些不兼容性,因为它根本不起作用,而且似乎没有任何方法可以排除故障。

因此,我决定完全放弃 IIS 进程内托管,转而托管 Kestrel在 Windows Service Worker 服务内部

相关内容