2011-09-12 133 views
16

我們想要預熱託管在IIS 7.5服務器上的ASP.NET MVC應用程序。以前在http://forums.iis.net/t/1176740.aspx上可用的預熱模塊自某時以來已被刪除。如何預熱IIS 7.5上的ASP.NET MVC應用程序?

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

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

是否可以使用Visual Studio 2010 - Web性能測試來預熱應用程序而不是創建手動可執行文件?任何其他的選擇? PS:應用程序使用表單身份驗證並使用會話 - 因此維護狀態Cookie和其他Cookie非常重要。

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

+0

相關:http://stackoverflow.com/questions/13250679/how-to-warm-up-entity-framework-when-does-it-get-cold –

+0

嘗試檢查[我的解決方案](http:// stackoverflow.com/questions/15348621/iis-7-5-application-initialization-for-asp-net-web-service-warmup-without-rema/15367638?noredirect=1#comment33723748_15367638)。它不會返回一個特殊的狀態碼,而是等待熱身響應請求。 – Jason

回答

9

您可以查看following post,瞭解內置於IIS 7.5和ASP.NET 4.0中的自動啓動功能。

+0

感謝您對此感興趣。請在原始查詢中查看「更新1」,以更好地瞭解問題的背景。使用ScottGu博客中指定的方法可能無助於完成我們所有的要求。我們需要讓這個網站生存下來 - 但在熱身之前,這些網站都無法訪問。我們需要先瀏覽我們的網頁,然後才能讓所有人訪問它們。 –

+0

@Dhwanil Shah,當IIS開始運行時,即在服務器重新啓動之後,第一次請求有時間到達應用程序之前,會發生熱身。 –

+0

我能從IProcessHostPreloadClient的實現中的代碼訪問我的網站中的頁面嗎? –

4

任何爲託管資源生成服務器請求的應用程序都可用於預熱IIS進程。您需要多少請求取決於哪些部分需要預熱。通常,預熱用於:

  • 啓動工作進程。爲此,您只需要請求一個資源爲整個應用程序預熱一個進程。
  • 執行任何靜態初始化,數據庫啓動或預緩存。當你做第一次請求時,你在Global.asax文件中做的任何事情都會發生,所以如果你可以做所有的初始化,那麼你仍然只需要發出一個頁面請求。
  • 強制預編譯ASP.NET頁面。要做到這一點,你需要擊中每一頁。幸運的是,這通常不是一個很大的時間成本,所以你可能不需要擔心。如果您的單頁頁面加載速度較慢,則可以單獨對其進行預熱。

這裏的「熱身」過程並不神奇。您只需強制IIS提供相關網址即可。你提到的一切都會照顧到這一點:使用壓力測試工具來查詢URL,編寫一個自定義的實用程序來發布HTTP請求,甚至只是腳本化一個像'wget'這樣的工具或者一個PowerShell腳本來下載這些URL就可以做到這一點。

據我所知,在IIS中限制對本地主機的訪問,唯一的改變方法是需要重新啓動IIS。你總是可以在你的應用程序中建立一個預先請求的鉤子,並在那裏維護狀態,並讓你的預熱過程查詢某個特定的URL來切換該狀態以「打開」。但我不確定你會完成什麼。如果在某種程度上,用戶在熱身結束之前嘗試查詢您的網站,那麼您的網站需要很長時間才能做出迴應,然後他們最終會獲得他們要求的網頁。如果您在熱身期間將他們鎖定在網站外,他們會得到一個瀏覽器網絡錯誤,聲稱該網站處於脫機狀態,這對我來說聽起來要糟糕得多。

+3

你可以在部署之前預先編譯頁面構建過程),它還具有尋找在C#/ VB.NET編譯期間未檢測到的錯誤的額外好處。 –

+0

@Michael - 感謝您對此感興趣。請檢查「UPDATE 1」以獲取更多的查詢上下文。 –

+0

@Jakub - 我們正在使用ASP.NET預編譯。 –

9

微軟已經發布了一個模塊,不正是你問什麼。通過在第一個請求到達之前加載Web應用程序,Application Initialization Module for IIS 7.5可以提高Web站點的響應能力。

您可以指定一系列網址IIS將接受來自真實用戶的請求之前預加載的。我不認爲你可以得到一個真正的用戶登錄expereince,但也許你可以設置模擬的網頁,不需要登錄,履行你所要求的同樣的熱身?

的功能,我認爲是最有說服力的是,這個模塊也使重疊進程回收。 following tutorial from IIS 8.0包括一個關於如何啓用重疊流程回收的分步方法。

當IIS檢測,積極的工作進程被回收,IIS不超過切換活動的交通到新的回收工作進程,直到新的結束的工作進程中運行的所有應用程序初始化網址的新工藝。這可確保瀏覽您的網站的客戶在應用程序正常運行後不會看到應用程序初始化頁面。

這IIS應用程序初始化模塊內置到IIS 8.0,但available for download for IIS 7.5

相關問題