簡體   English   中英

如何在IIS 7.5上預熱ASP.NET MVC應用程序?

[英]How to warm up an ASP.NET MVC application on IIS 7.5?

我們想熱身IIS 7.5服務器上托管的ASP.NET MVC應用程序。 以前在http://forums.iis.net/t/1176740.aspx上提供的預熱模塊已被刪除。

每當IIS或ASP.NET工作進程因任何原因重新啟動時,應該預熱應用程序。 在預熱期間,IIS應返回一些HTTP狀態代碼,表示其預熱狀態或無法為任何客戶端提供服務。

創建一個可執行文件,通過HttpRequests瀏覽網站中的必要頁面是一個好主意嗎? 可執行文件可以從IProcessHostPreloadClient實現中觸發。 是否可以配置IIS以便它只接受來自localhost的請求,一旦可執行文件完成,它就可以切換到所有客戶端 - 但是該交換機不應該觸發IIS重啟(顯然)。

是否可以使用Visual Studio 2010 - Web性能測試來預熱應用程序而不是創建手動可執行文件? 還有其他選擇嗎?

PS:應用程序使用表單身份驗證並使用會話 - 因此維護狀態cookie和其他cookie非常重要。

更新1 - 我們在我們的應用程序中使用.NET Framework 4.0和Entity Framework(數據庫優先)。 首次點擊EF查詢的速度很慢。 熱身背后的原因是讓這些第一次擊中。 我們已經在大多數地方使用了編譯查詢,並且已經為EF實現了預編譯視圖。 模型和應用程序的大小非常大且復雜。 預熱需要遍歷許多頁面,以確保在任何最終用戶訪問應用程序之前至少執行一次編譯和非編譯的EF查詢。

微軟發布了一個完全符合您要求的模塊。 IIS 7.5應用程序初始化模塊通過在第一個請求到達之前加載Web應用程序來提高Web站點的響應能力。

您可以在接受來自真實用戶的請求之前指定IIS將預加載的一系列Url。 我不認為您可以獲得真正的用戶登錄,但也許您可以設置不需要登錄的模擬頁面,以滿足您要求的相同熱身效果?

我認為最引人注目的功能是該模塊還可以實現重疊的流程回收。 IIS 8.0以下教程包含有關如何啟用重疊進程回收的分步方法。

當IIS檢測到正在回收活動工作進程時,IIS不會將活動流量切換到新的回收工作進程,直到新工作進程在新進程中完成所有應用程序初始化Urls的運行。 這可確保瀏覽您網站的客戶在應用程序運行和運行后不會看到應用程序初始化頁面。

此IIS應用程序初始化模塊內置於IIS 8.0中,但可供IIS 7.5下載

您可以查看以下帖子 ,了解IIS 7.5和ASP.NET 4.0中內置的自動啟動功能。

任何為托管資源生成服務器請求的應用程序都可用於預熱IIS進程。 確切地說,您需要多少個請求取決於需要預熱的部件。 通常,預熱用於:

  • 啟動工作進程。 為此,您只需要請求一個資源來為整個應用程序預熱一個進程。
  • 執行任何靜態初始化,數據庫啟動或預緩存。 您在第一次請求時會在Global.asax文件中執行任何操作,因此如果您可以進行所有初始化,則仍然只需要發出一個頁面請求。
  • 強制預編譯ASP.NET頁面。 為此,您需要點擊每一頁。 幸運的是,這通常不是一個時間成本,所以你可能不需要擔心它。 如果您確實有單獨的頁面加載緩慢,您可以單獨加熱它們。

這里的“熱身”過程並不神奇。 您只需要強制IIS來提供相關URL。 你提到的所有內容都會照顧到這一點:使用壓力測試工具查詢URL,編寫自定義實用程序來發布HTTP請求,甚至只需編寫“wget”或PowerShell腳本等腳本來下載URL就可以了。

至於限制訪問localhost,據我所知,在IIS中,唯一的方法是更改​​它需要重新啟動IIS。 您總是可以在應用程序中構建預請求掛鈎並在那里維護狀態,並讓您的預熱過程查詢一些特定的URL,將該狀態切換為“打開”。 但我不確定你會完成什么。 如果用戶確實在熱身結束之前嘗試查詢您的網站,那么所有這一切都會發生,您的網站需要很長時間才能回復,然后他們最終會獲得他們要求的網頁。 如果你在熱身期間將他們鎖定在網站之外,他們會得到一個瀏覽器網絡錯誤,聲稱該網站處於脫機狀態,這對我來說聽起來更糟糕。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM