這篇文章給大家介紹如何運(yùn)用ASP.NET中的session存儲模式,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
創(chuàng)新互聯(lián)公司基于成都重慶香港及美國等地區(qū)分布式IDC機(jī)房數(shù)據(jù)中心構(gòu)建的電信大帶寬,聯(lián)通大帶寬,移動大帶寬,多線BGP大帶寬租用,是為眾多客戶提供專業(yè)成都服務(wù)器托管報價,主機(jī)托管價格性價比高,為金融證券行業(yè)服務(wù)器托管,ai人工智能服務(wù)器托管提供bgp線路100M獨(dú)享,G口帶寬及機(jī)柜租用的專業(yè)成都idc公司。
在asp.net中的Session存儲方式不象asp那樣單一,一共提供了三種存儲方式,由于最近一個2000多人使用的web軟件出現(xiàn)了故障,用戶每天早上在某一時刻出現(xiàn)難以登陸現(xiàn)象,接著Session丟值出現(xiàn),只有重啟IIS,或機(jī)器.這時程序恢復(fù)正常了.整天都不會出現(xiàn)同樣的問題 ,但是第二天依舊!這種現(xiàn)象持續(xù)了好幾天,我檢查了一下日志文件,高峰每秒訪問人數(shù)大概20人左右,同時大概100多人在線,以后訪問人數(shù)還會增加,為了解決這個怪問題,先從軟件著手,故而三種方式都應(yīng)用了一番。
打開web.config文件
< sessionState mode="InProc" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" cookieless="false" timeout="20" />
其中默認(rèn)的mode是InProc類型,這種模式和以前ASP模式一樣,就是服務(wù)器將Session信息存儲在IIS進(jìn)程當(dāng)中,當(dāng)IIS關(guān)閉、重起后這些進(jìn)程信息都會丟失,但這種模式的性能***(具體沒測,看書上說),這種模式是asp.net的默認(rèn)方式。
由于這種模式出現(xiàn)了故障,當(dāng)時我的考慮就是由于訪問量過大的原因,導(dǎo)致Inetinfo.exe進(jìn)程崩潰。用戶難以登陸以致Session丟值出現(xiàn)故障,我采用了另外一種Session的存儲方式把Session信息存儲在進(jìn)程外。
首先,打開管理工具找到服務(wù),找到名為:asp.net State Service的服務(wù),啟動它.并且改成自動啟動。這時你可以在任務(wù)管理器中看到一個名為aspnet_state.exe的進(jìn)程。這就是我們保存session信息的進(jìn)程。
然后,回到web.config文件中把Mode的值改為StateServer,保存文件。OK.
< sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=192.10.78.76;User id=sa;password=sa" cookieless="false" timeout="20" />
這種模式當(dāng)我們重起IIS,保存的session值不會丟失。另外這種方式還可以把信息保存在其他機(jī)器的進(jìn)程中,不過還要更改 stateConnectionString="tcpip=127.0.0.1:42424",IP地址改為其他機(jī)器即可。
另外還采取了其他的措施.比如把數(shù)據(jù)庫和Web服務(wù)器分開,數(shù)據(jù)庫服務(wù)器不提供WEB服務(wù),Web服務(wù)器不提供數(shù)據(jù)庫服務(wù),
然后把連接池擴(kuò)大,由于asp.net中ADO.NET數(shù)據(jù)訪問默認(rèn)連接池數(shù)量為100, 后來我擴(kuò)大到6000順便把寫法加上來
“Server=(local);Database=rgs;password=sa;user ID=sa;Max Pool Size =6000; Min Pool Size =5;Pooling=True”
***把Machine.config中的ProcessModel中的memoryLimit改為95,默認(rèn)為60,表示內(nèi)存占用超過60%后iis進(jìn)程會自動重起。接著還做寫其它一些優(yōu)化IIS的方法,把注冊表的IIS緩存加大等等 。
當(dāng)我做完這些優(yōu)化步驟后,整個軟件運(yùn)行比較良好,第二天沒有發(fā)現(xiàn)堵塞的現(xiàn)象,但是第三天情況又出現(xiàn)了,實(shí)在沒辦法,我采取了***一種ASP.NET中的session存儲方法就是將Session存儲在SQLServer中,我想這樣穩(wěn)定性應(yīng)該強(qiáng)些。
要使用SQLServer中,首先在會話狀態(tài)的SQLServer的計算機(jī)上,運(yùn)行InstallSqlState.sql或InstallPersistSqlState.sql(默認(rèn)位置:systemroot\Microsoft.NET\Framework\versionNumber下面)兩個腳本都創(chuàng)建一個名為ASPState的數(shù)據(jù)庫,兩個腳本的差別在于放置ASPStateTempApplication和ASPStageTempSessions表的位置。InstallSqlState.sql腳本將這些表添加到TempDB數(shù)據(jù)庫,該數(shù)據(jù)庫在計算機(jī)重起時將丟失數(shù)據(jù),而InstallPersistSqlState.sql腳本將這些表添加到ASPState數(shù)據(jù)庫,該數(shù)據(jù)庫重啟時保留會話數(shù)據(jù)。
然后在應(yīng)用程序的web.config文件中,把< sessionState>元素的mode屬性設(shè)置為SQLServer,***將sqlConnectionString屬性設(shè)置為Integrated Security=SSPI;data source=serverName;
< sessionState mode="SQLServer" sqlConnectionString=" Integrated Security=SSPI;data source=dataserver;" cookieless="false" timeout="20"/> < /sessionState>
如果部署在其他機(jī)器上可以更改為,加上用戶名和密碼
< sessionState mode="SQLServer" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=192.10.78.76;User id=sa;password=sa" cookieless="false" timeout="20" />
這樣部署完成了,如果不想使用這種可以刪除掉,只要在相應(yīng)的目錄(systemroot\Microsoft.NET\Framework\versionNumber)找到UninstallPersistSqlState.sql或者UninstallSqlState.sql文件運(yùn)行即可。這樣就介紹了ASP.NET中的session存儲模式。
要注意的是,無論使用StateServer或者SQLServer模式時,當(dāng)使用session轉(zhuǎn)換對象時,注意對象要先序列化,就是在類前加上Serializable,否則會出現(xiàn)錯誤!
關(guān)于如何運(yùn)用ASP.NET中的session存儲模式就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。