Iis

即使配置了所有設置,IIS 應用程序初始化也沒有執行

  • April 12, 2020

最終目標是讓每當我的應用程序池被回收(每當我發佈網站更新時都會發生這種情況),我的網站會被訪問一次以“預熱”。通常,循環後的第一次訪問需要 2.5 秒,然後後續訪​​問只需要 0.5 秒,因此每次更新後都需要訪問一次。我想自動化它,似乎 Windows 應用程序初始化功能就是這樣做的方法。

問題是,啟用此功能後,在重新啟動應用程序池(或重新啟動任何東西)後,我看不到任何訪問我網站的訪問日誌。似乎應用程序初始化功能根本不起作用。我在系統事件日誌中看不到任何錯誤或任何進一步排除故障的方法。

下面是環境:

  • 視窗伺服器 2019
  • IIS 10(具有所有需要的角色/功能)
  • ASP.NET 核心 3.1

這是我配置的內容(使用IIS 8.0 應用程序初始化指南):

  • “應用程序初始化”功能/角色已安裝在 Windows 中

  • 應用程序池:

    • .NET CLR 版本:無託管程式碼(我也嘗試過 v4.0)
    • 託管管道模式:集成
    • 立即啟動應用程序池:已啟用
    • 啟動模式:AlwaysRunning
    • 空閒超時(分鐘):0
    • 正常時間間隔(分鐘):0
  • 地點:

    • 僅 HTTPS(我也嘗試過添加 HTTP)
    • 啟用預載入:真
  • 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" />

似乎 IIS 應用程序初始化功能和 ASP.NET Core 3.1 站點之間一定存在一些不兼容,因為它根本不起作用,而且似乎沒有任何故障排除方法。

因此,我決定完全放棄 IIS 程序內託管,而是將 Kestrel 託管在 Windows Service Worker Service中。

如果您的網站使用數據庫,則可能存在問題,大多數情況下僅在第一次請求時才建立與數據庫的連接,此時也會進行數據庫版本檢查,如果需要同時,在回收後檢查連接是否仍然處於活動狀態,如果它不處於活動狀態,則使其從池開始,這應該會有所幫助。

(自動翻譯,請忽略拼寫錯誤)

引用自:https://serverfault.com/questions/1010740