解說(shuō)ASP.NET中的session存儲(chǔ)模式運(yùn)用_.Net教程
推薦:解讀.Net的精髓——XML和SOAPInternet 的應(yīng)用正在不斷地?cái)U(kuò)大,但我們的 Internet 編程方式還處于石器時(shí)代。Internet 用戶就像老式主機(jī)的分時(shí)終端上的用戶一樣,他們從一個(gè)受保護(hù)的資源請(qǐng)求信息,然后等待回應(yīng)。你從正在瀏覽的 Internet 站點(diǎn)上接收的信息由它希望提供給你的、基于HTML 的
在asp.net中的Session存儲(chǔ)方式不象asp那樣單一,一共提供了三種存儲(chǔ)方式,由于最近一個(gè)2000多人使用的web軟件出現(xiàn)了故障,用戶每天早上在某一時(shí)刻出現(xiàn)難以登陸現(xiàn)象,接著Session丟值出現(xiàn),只有重啟IIS,或機(jī)器.這時(shí)程序恢復(fù)正常了.整天都不會(huì)出現(xiàn)同樣的問(wèn)題 ,但是第二天依舊!這種現(xiàn)象持續(xù)了好幾天,我檢查了一下日志文件,高峰每秒訪問(wèn)人數(shù)大概20人左右,同時(shí)大概100多人在線,以后訪問(wèn)人數(shù)還會(huì)增加,為了解決這個(gè)怪問(wèn)題,先從軟件著手,故而三種方式都應(yīng)用了一番。
打開(kāi)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類(lèi)型,這種模式和以前ASP模式一樣,就是服務(wù)器將Session信息存儲(chǔ)在IIS進(jìn)程當(dāng)中,當(dāng)IIS關(guān)閉、重起后這些進(jìn)程信息都會(huì)丟失,但這種模式的性能最高(具體沒(méi)測(cè),看書(shū)上說(shuō)),這種模式是asp.net的默認(rèn)方式。
由于這種模式出現(xiàn)了故障,當(dāng)時(shí)我的考慮就是由于訪問(wèn)量過(guò)大的原因,導(dǎo)致Inetinfo.exe進(jìn)程崩潰。用戶難以登陸以致Session丟值出現(xiàn)故障,我采用了另外一種Session的存儲(chǔ)方式把Session信息存儲(chǔ)在進(jìn)程外。
首先,打開(kāi)管理工具找到服務(wù),找到名為:asp.net State Service的服務(wù),啟動(dòng)它.并且改成自動(dòng)啟動(dòng)。這時(shí)你可以在任務(wù)管理器中看到一個(gè)名為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值不會(huì)丟失。另外這種方式還可以把信息保存在其他機(jī)器的進(jìn)程中,不過(guò)還要更改 stateConnectionString="tcpip=127.0.0.1:42424",IP地址改為其他機(jī)器即可。
另外還采取了其他的措施.比如把數(shù)據(jù)庫(kù)和Web服務(wù)器分開(kāi),數(shù)據(jù)庫(kù)服務(wù)器不提供WEB服務(wù),Web服務(wù)器不提供數(shù)據(jù)庫(kù)服務(wù),
然后把連接池?cái)U(kuò)大,由于asp.net中ADO.NET數(shù)據(jù)訪問(wèn)默認(rèn)連接池?cái)?shù)量為100, 后來(lái)我擴(kuò)大到6000順便把寫(xiě)法加上來(lái)
“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)存占用超過(guò)60%后iis進(jìn)程會(huì)自動(dòng)重起。接著還做寫(xiě)其它一些優(yōu)化IIS的方法,把注冊(cè)表的IIS緩存加大等等 。
當(dāng)我做完這些優(yōu)化步驟后,整個(gè)軟件運(yùn)行比較良好,第二天沒(méi)有發(fā)現(xiàn)堵塞的現(xiàn)象,但是第三天情況又出現(xiàn)了,實(shí)在沒(méi)辦法,我采取了最后一種ASP.NET中的session存儲(chǔ)方法就是將Session存儲(chǔ)在SQLServer中,我想這樣穩(wěn)定性應(yīng)該強(qiáng)些。
要使用SQLServer中,首先在會(huì)話狀態(tài)的SQLServer的計(jì)算機(jī)上,運(yùn)行InstallSqlState.sql或InstallPersistSqlState.sql(默認(rèn)位置:systemroot\Microsoft.NET\Framework\versionNumber下面)兩個(gè)腳本都創(chuàng)建一個(gè)名為ASPState的數(shù)據(jù)庫(kù),兩個(gè)腳本的差別在于放置ASPStateTempApplication和ASPStageTempSessions表的位置。InstallSqlState.sql腳本將這些表添加到TempDB數(shù)據(jù)庫(kù),該數(shù)據(jù)庫(kù)在計(jì)算機(jī)重起時(shí)將丟失數(shù)據(jù),而InstallPersistSqlState.sql腳本將這些表添加到ASPState數(shù)據(jù)庫(kù),該數(shù)據(jù)庫(kù)重啟時(shí)保留會(huì)話數(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存儲(chǔ)模式。
最后要注意的是,無(wú)論使用StateServer或者SQLServer模式時(shí),當(dāng)使用session轉(zhuǎn)換對(duì)象時(shí),注意對(duì)象要先序列化,就是在類(lèi)前加上Serializable,否則會(huì)出現(xiàn)錯(cuò)誤!
分享:關(guān)于.NET 4.0改進(jìn)的介紹.NET 4.0改進(jìn)的介紹 核心服務(wù) 大部分的新特性都是圍繞自定義和擴(kuò)展來(lái)的,原先不能自定義的東西現(xiàn)在可以自定義了,可以自己擴(kuò)展了,然后把自己的組件在web.config中配置即可應(yīng)用我們自己的組件。 Web.Config精簡(jiǎn) .NET框架4.0中會(huì)把大部分配置放到machine.conf
- asp.net如何得到GRIDVIEW中某行某列值的方法
- .net SMTP發(fā)送Email實(shí)例(可帶附件)
- js實(shí)現(xiàn)廣告漂浮效果的小例子
- asp.net Repeater 數(shù)據(jù)綁定的具體實(shí)現(xiàn)
- Asp.Net 無(wú)刷新文件上傳并顯示進(jìn)度條的實(shí)現(xiàn)方法及思路
- Asp.net獲取客戶端IP常見(jiàn)代碼存在的偽造IP問(wèn)題探討
- VS2010 水晶報(bào)表的使用方法
- ASP.NET中操作SQL數(shù)據(jù)庫(kù)(連接字符串的配置及獲取)
- asp.net頁(yè)面?zhèn)髦禍y(cè)試實(shí)例代碼
- DataGridView - DataGridViewCheckBoxCell的使用介紹
- asp.net中javascript的引用(直接引入和間接引入)
- 三層+存儲(chǔ)過(guò)程實(shí)現(xiàn)分頁(yè)示例代碼
.Net教程Rss訂閱編程教程搜索
.Net教程推薦
- 關(guān)于visual studio 2012 update 2中的新功能介紹
- 解析.Net基礎(chǔ):C#中對(duì)DatagridView部分常用操作
- 解析Web開(kāi)發(fā)模式的顛覆者:ASP.NET MVC
- ASP.NET、JSP及PHP之間的抉擇
- 基于.NET平臺(tái)的分層架構(gòu)實(shí)戰(zhàn)(五)接口的設(shè)計(jì)與實(shí)現(xiàn)
- 談.NET 3.5 SP1 X64與HTTP Error 503
- 探討.Net整合其他平臺(tái)
- 如何在VB.NET中利用Split和Replace函數(shù)計(jì)算字?jǐn)?shù)
- 解析asp.net 后臺(tái)代碼如何遍歷checkbox
- 如何實(shí)現(xiàn)C#中用鼠標(biāo)移動(dòng)頁(yè)面的功能
- 相關(guān)鏈接:
- 教程說(shuō)明:
.Net教程-解說(shuō)ASP.NET中的session存儲(chǔ)模式運(yùn)用
。