簡體   English   中英

關於 IHttpModule.Dispose 和 Application_End 的問題

[英]Question regarding IHttpModule.Dispose and Application_End

我剛剛在閱讀這篇文章“何時調用 IHttpModule.Dispose 方法?” 我找到了這個

“在從執行管道中刪除模塊之前,Dispose 方法會執行任何最終清理工作。”

這意味着它是應用程序范圍的。

沒關系。 無論如何,我自己嘗試發現使用 IHttpModule Dispose 方法和 Application.Disposed 事件的事件處理程序應該幾乎相同。 第一個發生在第二個之后。

我覺得這不是 100% 正確的,即 IHttpModule.Dispose 並不總是跟隨 Application_End。 假設我有多個應用程序 object 實例為我的應用程序運行,這意味着應用程序 object 的每個實例都將在其中包含單獨的模塊實例。 現在讓我們假設當應用程序池充滿應用程序實例時,會發生什么? 是不是開始一個一個地處理應用程序實例,在鏈中應用程序實例內部的模塊將被處理掉。 現在這個模塊的處理並不意味着 Application_End 會在那之后觸發。 應用程序仍在運行。 我對嗎?

是的。

HttpModules 是每個 HttpApplication 的。 與其名稱建議相反,global.asax 中的 Application_End 方法不會在每個 HttpApplicaton 的生命周期結束時觸發。 它在當前 AppDomain 中所有 HttpApplications 的生命周期結束時觸發(當 AppDomain 被拆除時)。 Application_Start 方法也是如此。

每個應用程序只有一個應用程序 object 的實例。 有很多 session 對象每個都在處理請求,或者等待被回收。

應用程序池不會充滿應用程序對象,因為每個應用程序只有 1 個。 當一個應用程序池托管超過 1 個應用程序時,會有很多應用程序,回收池會殺死它們。 應用程序池還對其進行了健康監控,將在一定數量的請求/內存使用后重新啟動進程。 在這種情況下,現有會話將被終止,而新應用程序開始處理新請求。 當舊應用程序中的所有會話都已失效時,該應用程序將被拆除。

有關詳細信息,請參閱MSDN

暫無
暫無

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

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