熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> ASP編程 >> 正文

ASP.NET中的session存儲模式運用

2013-11-15 12:50:18  來源: ASP編程 

  在中的Session存儲方式不象asp那樣單一一共提供了三種存儲方式由於最近一個多人使用的web軟件出現了故障用戶每天早上在某一時刻出現難以登陸現象接著Session丟值出現只有重啟IIS或機器這時程序恢復正常了整天都不會出現同樣的問題 但是第二天依舊!這種現象持續了好幾天我檢查了一下日志文件高峰每秒訪問人數大概人左右同時大概多人在線以後訪問人數還會增加為了解決這個怪問題先從軟件著手故而三種方式都應用了一番

  打開nfig文件

  


    < sessionState   
            mode=InProc 
            stateConnectionString=tcpip=: 
            sqlConnectionString=data source=;Trusted_Connection=yes 
            cookieless=false   
            timeout=   
    /> 

  其中默認的mode是InProc類型這種模式和以前ASP模式一樣就是服務器將Session信息存儲在IIS進程當中當IIS關閉重起後這些進程信息都會丟失但這種模式的性能最高(具體沒測看書上說)這種模式是的默認方式

  由於這種模式出現了故障當時我的考慮就是由於訪問量過大的原因導致Inetinfoexe進程崩潰用戶難以登陸以致Session丟值出現故障我采用了另外一種Session的存儲方式把Session信息存儲在進程外

  首先打開管理工具找到服務找到名為: State Service的服務啟動它並且改成自動啟動這時你可以在任務管理器中看到一個名為aspnet_stateexe的進程這就是我們保存session信息的進程

  然後回到nfig文件中把Mode的值改為StateServer保存文件OK

  


    < sessionState   
            mode=StateServer 
            stateConnectionString=tcpip=: 
            sqlConnectionString=data source=;User id=sa;password=sa 
            cookieless=false   
            timeout=   
    /> 

  這種模式當我們重起IIS保存的session值不會丟失另外這種方式還可以把信息保存在其他機器的進程中不過還要更改 stateConnectionString=tcpip=:IP地址改為其他機器即可

  另外還采取了其他的措施比如把數據庫和Web服務器分開數據庫服務器不提供WEB服務Web服務器不提供數據庫服務

  然後把連接池擴大由於中ADONET數據訪問默認連接池數量為 後來我擴大到順便把寫法加上來

  Server=(local);Database=rgs;password=sa;user ID=sa;Max Pool Size =; Min Pool Size =;Pooling=True

  最後把nfig中的ProcessModel中的memoryLimit改為默認為表示內存占用超過%後iis進程會自動重起接著還做寫其它一些優化IIS的方法把注冊表的IIS緩存加大等等

  當我做完這些優化步驟後整個軟件運行比較良好第二天沒有發現堵塞的現象但是第三天情況又出現了實在沒辦法我采取了最後一種ASPNET中的session存儲方法就是將Session存儲在SQLServer中我想這樣穩定性應該強些

  要使用SQLServer中首先在會話狀態的SQLServer的計算機上運行InstallSqlStatesql或InstallPersistSqlStatesql(默認位置:systemroot\MicrosoftNET\Framework\versionNumber下面)兩個腳本都創建一個名為ASPState的數據庫兩個腳本的差別在於放置ASPStateTempApplication和ASPStageTempSessions表的位置InstallSqlStatesql腳本將這些表添加到TempDB數據庫該數據庫在計算機重起時將丟失數據而InstallPersistSqlStatesql腳本將這些表添加到ASPState數據庫該數據庫重啟時保留會話數據

  然後在應用程序的nfig文件中把< sessionState>元素的mode屬性設置為SQLServer最後將sqlConnectionString屬性設置為Integrated Security=SSPI;data source=serverName;

  


    < sessionState mode=SQLServer 
    sqlConnectionString= Integrated Security=SSPI;data source=dataserver; 
    cookieless=false 
    timeout=/>  
    < /sessionState>  
     

  如果部署在其他機器上可以更改為加上用戶名和密碼

  


    < sessionState   
            mode=SQLServer 
            stateConnectionString=tcpip=: 
            sqlConnectionString=data source=;User id=sa;password=sa 
            cookieless=false   
            timeout=   
    /> 

  這樣部署完成了如果不想使用這種可以刪除掉只要在相應的目錄(systemroot\MicrosoftNET\Framework\versionNumber)找到UninstallPersistSqlStatesql或者UninstallSqlStatesql文件運行即可這樣就介紹了ASPNET中的session存儲模式

  最後要注意的是無論使用StateServer或者SQLServer模式時當使用session轉換對象時

  注意對象要先序列化就是在類前加上Serializable否則會出現錯誤!


From:http://tw.wingwit.com/Article/program/ASP/201311/21731.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.