2010-11-10 17 views
0

有時,當IIS重新啓動應用程序池時,它將在前一個實例完全關閉之前啓動應用程序的新實例。這導致我很多問題,所以我想知道我能做些什麼。防止IIS在重啓過程中關閉先前實例之前啓動應用程序

行動的過程就像這樣。 (跨越大約20秒)

  1. 應用程序正在運行,我們稱之爲實例A.
  2. 重新啓動初始化
  3. 一個新的實例啓動時,我們稱之爲B(通過的Application_Start登錄)
  4. 進來的請求由實例B處理,這會使所有已緩存的數據無效。
  5. 實例A上的計時器被觸發,假定其緩存有效,並向持久存儲中寫入無效的內容。
  6. 實例A被關閉(由Application_End記錄)

優選我想禁止上述行爲完全,IIS應只允許一個實例。如果不可能,我可以在我的代碼中檢測是否有其他實例正在運行,然後等待它在application_start內退出?如果不可能,解決此問題的最佳方法是什麼?

回答

1

禁用重疊的回收:

「在重疊的回收情況, 針對循環 過程中繼續處理所有剩餘 請求,就同時創建一個替代工人 過程 新工藝。在舊的 工作進程停止之前啓動,並且請求 然後被引導到新的進程。這個 設計可以防止延遲服務, ,因爲舊的進程繼續到 接受請求,直到新進程 已成功初始化,並且 被指示僅在 新進程準備好處理 請求之後關閉。

http://msdn.microsoft.com/en-us/library/ms525803(v=vs.90).aspx

+0

除非有正當理由,修復,而不是改變IIS設置你的應用程序。重疊的回收確實可以提供更好的用戶體驗。 – 2013-02-28 22:31:00

相關問題