關於使用詳解ASP.NET State Service
ASP.NET State Service服務如果啟動可以解決這個問題,它會生成一個aspnet_state.exe進程,這個就是Session信息的進程。只要這個進程在,就算是重啟了IIS,站點的Session也不會丟失。
用這個模式注意修改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"
/>
要把mode的值改為 StateServer
關於保存session三種模式(InProc,StateServer,SQLServer):
asp.net中session使用一個唯一的120位標識符跟蹤會話,這個標識符由httpmodule鏈上的SessionStateModule(System.web.SessionState)負責產生,並且保存會話信息,但是會話信息並不是SessionStateModule保存的,而是由狀態提供程序保存的。
狀態提供程序可以是實現HttpSessionState接口的任意類,也就是可以自定義如何處理會話狀態。
在asp.net中session有3種預定義的狀態模式,分別為InProc(默認),StateServer(開單獨的線程),SQLServer(sqlserver數據庫)
InProc是默認選項,對小型網站有意義。在web農場中InProc不能正常工作,需要使用StateServer或者Sqlserver狀態服務才能在服務器間共享狀態。
使用StateServer和sqlserver狀態服務需要注意幾個問題:
A)使用StateServer和SqlServer狀態服務時,存儲到session中的對象必須支持序列化。否則存儲到session的對象無法傳送到狀態服務和存儲到數據庫。
B)如果在web農場使用asp.net,需要一些額外的配置保證所有web服務器同步。否則,服務器以不同的方式編碼會話狀態信息。解決該問題的方式為修改machine.config文件的<machineKey>節點,確保服務器使用相同的設置。
C)不使用InProc,則SessionStateModuel.End事件就會忽略,所以,global.asax和http模塊所有該事件的處理程序將被忽略。
文章來自學IT網:http://www.xueit.com/html/2010-05/21-42551412201052221541162.html