Asp.net

IIS 應用程序池/重新啟動和 ASP.NET

  • December 13, 2012

我們正在使用 IIS7 來託管一個基於 web 的 asp.net 應用程序。在這種環境中,管理員和開發人員可以定期將程式碼部署到應用程序。

新程式碼或應用程序作為 DLL 進入 ASP.NET bin 文件夾。部署新的 DLL 後,IIS 重新啟動程序,影響(減慢)所有線上使用者。

有沒有辦法配置 IIS 在後台執行程序,一旦準備好從舊狀態切換到新狀態而不影響使用者?!

提前感謝您的回饋!

IIS 已經這樣做了,這就是回收的全部內容。IT 正在載入 DLL,而舊版本的應用程序仍在執行。只有在完成此操作後,才能完成回收。

然而**,載入 DLL 只是準備好 Web 應用程序的一部分**,可能還會有初始載入,如載入/記憶體使用者數據庫等。

這些操作不是回收過程的一部分,它們發生在所有 DLL 重新載入並且回收已經完成之後.

不久前,由於啟動期間的大量數據庫活動/記憶體,我遇到了一個應用程序啟動時間很長的問題。所以我很感興趣是否有一些功能允許我們在回收標記為完成之前執行程式碼,以便在一切準備好執行時首先考慮應用程序回收。基本上我想要的是某種暫存功能。

我就這個問題與 IIS 團隊聯繫過,遺憾的是他們告訴我不存在這樣的功能,也沒有計劃

要解決此問題,您可以嘗試執行以下操作:

  • 使用交替部署:

您設置 2 個具有單獨應用程序池的網站。其中一個是 LIVE 網站,另一個是 STAGED 網站。如果您想部署更改,您只需部署到 STAGED 網站。在所有內容都載入/記憶體等之後,您切換 Web 應用程序的 URL 設置以將傳入請求從 LIVE 重新路由到 STAGED 請求。所以現場直播變成了新的舞台表演,反之亦然。然後下一次部署將再次轉到新的 STAGED,依此類推。

更新

顯然他們已經創建了一個提供此功能的 IIS 模組:

IIS 7.5 的 IIS 應用程序預熱模組

IIS 團隊已經發布了 IIS 7.5 應用程序預熱模組的第一個 beta 測試版本。這使得預熱您的應用程序比之前描述的更容易。您無需編寫自定義程式碼,而是指定要在 Web 應用程序接受來自網路的請求之前執行的資源 URL。此預熱發生在 IIS 服務啟動期間(如果您將 IIS 應用程序池配置為 AlwaysRunning)以及 IIS 工作程序回收時。在回收期間,舊的 IIS 工作程序會繼續執行請求,直到新生成的工作程序完全預熱,這樣應用程序就不會遇到由於未準備好的記憶體而導致的中斷或其他問題。請注意,此模組適用於任何版本的 ASP.NET,從 2.0 版開始。

有關詳細資訊,請參閱 IIS.net 網站上的應用程序預熱。有關說明如何使用預熱功能的演練,請參閱 IIS.net 網站上的 IIS 7.5 應用程序預熱模組入門。

看:

http://www.asp.net/whitepapers/aspnet4

如果您使用 ASP.NET 4 自動啟動功能:

您仍然可以選擇不時自動回收工作程序。但是,當您這樣做時,應用程序將立即重新啟動並且您的預熱程式碼將執行(與今天不同 - 您必須等待下一個請求才能執行此操作)。

預熱和自動啟動功能之間的主要區別在於預熱模組是回收過程的一部分。而不是在執行初始化程式碼時阻止應用程序的請求

使用“自動啟動”功能獲得的唯一好處是您不必等待使用者點擊頁面,這對您的情況沒有幫助。

見顧的博文:

http://weblogs.asp.net/scottgu/archive/2009/09/15/auto-start-asp-net-applications-vs-2010-and-net-4-0-series.aspx

更新 2:

遺憾的是,IIS 7/7.5 的預熱模組已經停止:

http://forums.iis.net/t/1176740.aspx

它將成為 IIS8 的一部分(現在稱為應用程序初始化模組):

http://weblogs.asp.net/owscott/archive/2012/03/01/what-s-new-in-iis-8.aspx

更新 3:

正如評論中所指出的,在IIS 8 發布後,IIS 7.5 的預熱模組作為 IIS 7.5 的應用程序初始化模組重新出現:

http://www.iis.net/downloads/microsoft/application-initialization

引用自:https://stackoverflow.com/questions/9658849