成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

淺談ASP.NET狀態管理器

開發 后端
本文介紹ASP.NET狀態管理器,實現這些特性的正是上節提到的 SessionStateModule.InitModuleFromConfig 函數中,根據 sessionState 標記的 mode 屬性選擇的四種不同的ASP.NET狀態管理器實現。

狀態管理本來是一件很美好的事情,嘿嘿,只可惜總是有些廠商在實現的時候考慮得不那么周全。例如 MS 在 ASP狀態管理實現就比較爛,因為只實現了一個進程內的基于內存的狀態管理,故而存在很多問題:
1.所有的 Session 數據都保存在 Web 服務的進程中,會造成服務器支持會話數量受到服務器內存資源的限制問題,同時也因為大量非活動會話導致內存被無效占用。
2.服務器進程崩潰會導致所有的會話數據丟失。
3.會話無法跨進程或在負載均衡情況下使用,除非負載均衡技術保障同一用戶每次都能被路由到同一機器上。就算這樣也無法保障服務器崩潰造成的會話數據丟失。
4.需要 Cookie 的支持,而現在因為安全性問題,很多人在瀏覽器中關閉了 Cookie 和 js 的支持。

為此 ASP 的使用者不得不自己手工將會話信息以會話 ID 為主鍵同步到外部數據庫中,以緩解類似問題。

而在 ASP.NET 中,因為設計時就考慮了這些問題,能夠避免這些限制:
1.支持進程外的狀態管理,通過獨立狀態管理服務或 SQL Server 狀態服務器管理會話狀態
2.支持不使用 Cookie 的狀態維護,通過在 URL 中自動增加會話 ID 來避免使用 Cookie
3.通過獨立的狀態管理服務或SQL Server 狀態服務器支持負載均衡時同步使用會話信息

實現這些特性的正是上節提到的 SessionStateModule.InitModuleFromConfig 函數中,根據 sessionState 標記的 mode 屬性選擇的四種不同的ASP.NET狀態管理器實現。

  1. <system.web> 
  2. <sessionStatemodesessionStatemode="InProc" 
  3. stateConnectionString="tcpip=127.0.0.1:42424" 
  4. stateNetworkTimeout="10" 
  5. sqlConnectionString="datasource=127.0.0.1;IntegratedSecurity=SSPI" 
  6. cookieless="false" 
  7. timeout="20"/> 
  8. </system.web> 

ConfigInit 方法主要在初始化狀態管理器時通知其根據配置進行初始化工作,并將負責會話狀態清除的 SessionOnEndTarget 對象實例綁定到會話管理器(我們后面討論會話狀態管理實現時詳細討論)。對 OutOfProcStateClientManager 和 SqlStateClientManager 來說,在此階段還會初始化與外部服務器的連接,并通過一個 System.Web.Util.ResourcePool 實例,提供基于時間策略的資源池來維護連接;

ResetTimeout 方法重置指定 Session 的超時時間;對 InProcStateClientManager 來說,這個超時時間是通過 System.Web.Caching.CacheInternal 類型實現的緩存對象來使用的; OutOfProcStateClientManager 直接通過 MakeRequest 函數構造請求發給外部獨立的狀態管理器執行; SqlStateClientManager 則調用存儲過程 TempResetTimeout 更新 ASPStateTempSessions 表的過期時間 Expires 字段;

Dispose 方法是否狀態管理器的資源,落實到代碼就是對 OutOfProcStateClientManager 和 SqlStateClientManager 中資源池的釋放;

Set 方法則將指定的 SessionStateItem 存儲到 id 相關的會話數據中,并根據 inStorage 指定的對象狀態,決定在發生異常的情況下是否釋放對此會話的鎖。與 ResetTimeout 的實現類似,OutOfProcStateClientManager 發送請求給外部獨立的狀態管理器;SqlStateClientManager 調用存儲過程 TempUpdateStateItemXXX 更新會話狀態表 ASPStateTempSessions 中的過期時間 Expires 字段、鎖定狀態 Lock 字段、以及狀態信息 SessionItemShort/SessionItemLong (分別保存 7000字節以下或之上的數據)。如發生異常并設置 inStorage 標記,則先調用 TempReleaseStateItemExclusive 釋放會話鎖。

對ASP.NET狀態管理器中數據的獲取較為復雜,IStateClientManager 接口使用的是異步調用的模式,并為提高效率將獨占的獲取數據單獨拿出來。狀態管理器實現類通過通用基類 System.Web.SessionState.StateClientManager 實現的幾個工具方法,將數據獲取操作異步化。再最終由實現類通過 Get 和 GetExclusive 方法完成操作。獲取數據的方法 InProcStateClientManager 通過緩存;OutOfProcStateClientManager 通過請求;SqlStateClientManager 通過 TempGetStateItemXXX 存儲過程完成。

【編輯推薦】

  1. ASP.NET開發技巧之Theme功能淺析
  2. 詳解ASP.NET動態編譯
  3. Apache支持ASP.NET方法淺析
  4. 淺談ASP.NET服務器標準控件
  5. ASP.NET中SQL Server數據庫備份恢復淺析
責任編輯:佚名 來源: 51CTO.COM
相關推薦

2009-07-28 16:03:23

ASP.NET狀態服務

2009-07-20 15:30:11

ASP.NET應用

2009-07-22 16:11:43

ASP.NET AJA

2009-07-24 10:52:42

ASP.NET ISA

2009-08-05 17:39:13

ASP.NET常用狀態

2009-08-04 14:36:00

ASP.NET分頁管理

2009-07-21 14:16:02

ASP.NET管道優化

2011-08-23 10:58:59

2009-07-23 15:24:37

ASP.NET Ima

2009-07-27 16:19:59

ASP.NET報表控件

2009-07-28 17:49:30

ASP.NET定期回收

2009-07-20 17:12:17

ASP.NET訪問數據

2009-08-05 15:29:33

ASP.NET For

2009-07-22 13:24:24

ASP.NET MVC

2009-07-23 15:44:39

ASP.NET MVC

2009-08-10 10:19:47

ASP.NET組件設計

2009-08-04 17:18:37

2009-07-28 10:43:23

Web服務器ASP.NET

2009-07-28 11:09:02

ASP.NET狀態類型

2009-07-21 15:02:19

ASP.NET應用程序
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 美女天堂 | 久久黄网 | 91视频国产区 | 一区视频在线播放 | 国产成人精品免费 | 亚洲欧美日韩精品久久亚洲区 | 国产区视频在线观看 | 国产精品欧美一区二区三区 | 亚洲天堂中文字幕 | 在线视频亚洲 | 国产精品高潮呻吟久久久久 | 一区二区三区av | 欧美成人免费 | 国产精品一区二区三区久久久 | 欧美在线一区二区三区 | 二区三区视频 | 91精品国产91久久久 | 国产精品美女久久久久久久久久久 | 99久久国产 | www日日日| 91九色婷婷 | 91精品国产综合久久久久久丝袜 | 99久久99久久精品国产片果冰 | 欧美一区二区三区在线观看 | 欧美无乱码久久久免费午夜一区 | 国产成人精品一区二 | 国产精品99久| 精品国产一区二区三区日日嗨 | 日韩在线视频免费观看 | 精品国产免费人成在线观看 | 99精品国产一区二区三区 | 草比网站| 国产高清免费视频 | 国产高清免费 | 欧美色综合网 | 久久久久中文字幕 | 精品一区二区三区中文字幕 | 久久高清免费视频 | 欧美成人免费在线视频 | 蜜臀久久 | 一区二区三区在线播放 |