簡體   English   中英

應用程序池回收如何影響ASP Net會話狀態?

[英]How does an application pool recycle affect ASP Net Session State?

我知道,當應用程序池被回收時,會啟動一個新的工作進程,但我對在此過程中如何處理過期和有效會話感到困惑? 傳遞給新的工作進程線程哪些被淘汰? 它會做什么:

  • 用戶A的會話已過期
  • 用戶B的會話有效

在回收之后,當用戶A和用戶B將要求他們的會話狀態是什么時?

如果您有一個Web服務器,並且您已使用默認的InProc模式進行SessionState持久性,那么您在服務器代碼中添加到會話的Dictionary中的任何數據都將在應用程序池回收期間丟失 - 在回收后,當您的代碼接下來訪問SessionState字典中的條目時,它將返回null

如果跨負載均衡器有多個Web服務器,會話狀態錯誤地配置為InProc ,並且用戶返回到其他服務器(即沒有粘性路由),則會發生類似情況。

(存儲在瀏覽器上的會話狀態cookie可能仍有效幾分鍾)。

允許會話狀態“存活”應用程序池回收,服務器崩潰或跨越服務器場的方式是保留存儲在SessionState數據,以便服務器(或多個服務器)可以在用戶的​​時候再次檢索數據會話返回。 最簡單的方法是使用開箱即用的解決方案之一,即單獨的StateServer進程,或在SqlServer數據庫中存儲狀態。 自定義持久性也是一種選擇。

一個警告 - 請注意,您在“進程外”模式下存儲的任何數據(如StateServerSqlServer需要可序列化 - 當您切換出InProc時,這可能是一個重大變化。

暫無
暫無

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

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