Iis
即使配置了所有設置,IIS 應用程序初始化也沒有執行
最終目標是讓每當我的應用程序池被回收(每當我發佈網站更新時都會發生這種情況),我的網站會被訪問一次以“預熱”。通常,循環後的第一次訪問需要 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
部分嘗試了各種設置,並將其移至 web.config- 我注意到
globalModules
applicationHost.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中。
如果您的網站使用數據庫,則可能存在問題,大多數情況下僅在第一次請求時才建立與數據庫的連接,此時也會進行數據庫版本檢查,如果需要同時,在回收後檢查連接是否仍然處於活動狀態,如果它不處於活動狀態,則使其從池開始,這應該會有所幫助。
(自動翻譯,請忽略拼寫錯誤)