aspnet中,session默認以inproc模式存儲,也就是保存在iis進程中,這樣有個優點就是效率高,但不利於為本負載均衡擴展。可以把session信息保存在SQL Server中,據說,該種方式比起inproc性能損失為10%-20%。如何實現呢,主要分兩步介紹:
一.這個方法網站找的 具體我也沒實現
1、初始化SQL Server中的狀態數據庫
ASP.NET SQL Server 提供注冊工具Aspnet_regsql.exe,用於創建供 ASP.NET 中的 SQL Server 提供程序使用的 Microsoft SQL Server 數據庫。Aspnet_regsql.exe位於 /%windir%/Microsoft.NET/Framework/<versionNumber>/aspnet_regsql.exe 目錄下。如果麻煩,可以 直接用visual studio tools 的命令提示工具中直接輸入aspnet_regsql.exe使用。用法如下:
Aspnet_regsql.exe <options>
可以用如下的語法來添加默認session數據庫ASPState
aspnet_regsql.exe -S localhost -U sa -P why1234? -ssadd -sstype p
-S,-U/-P
必須是大寫,分別表示數據庫服務器,用戶名和密碼。
-ssadd / –ssremove 參數:
-ssadd表示是添加Session數據庫, -ssremove表示移除Session數據庫.
sstype 參數:
選項 |
說明 |
t |
將會話數據存儲到 SQL Server tempdb 數據庫中。這是默認設置。如果將會話數據存儲到 tempdb 數據庫中,則在重新啟動 SQL Server 時將丟失會話數據。 |
p |
將會話數據存儲到 ASPState 數據庫中,而不是存儲到 tempdb 數據庫中。 |
c |
將會話數據存儲到自定義數據庫中。如果指定 c 選項,則還必須使用 -d 選項包括自定義數據庫的名稱。 |
創建自定義數據庫myAppState,可以用如下的語法:
aspnet_regsql.exe -S localhost -U sa -P why1234? -ssadd -sstype c -d myAppState
2、配置webconfig
在webconfig的 <system.web>節下添加如下配置:
<sessionState mode="SQLServer" sqlConnectionString="server=localhost; uid=sa; pwd=123456;"/>
如果在初始化數據庫的時候,創建了自定義數據庫可以用類似於如下的的配置:
<sessionState mode="SQLServer" allowCustomSqlDatabase="true" sqlConnectionString="server=localhost; DataBase=myAspState;uid=sa; pwd=123456;"/>
通過以上兩步的設置,已經可以了。詳細情況請參閱msdn。
二 .這個方法解決了我的問題
打開VS2005命令提示,輸入:aspnet_regsql.exe -?
出現了aspnet_regsql.exe的說明,往下拉會看到"會話狀態選項",有一命令:-ssadd(Session state add?) 解釋說:添加對 sqlserver 模式會話狀態的支持.
估計就是這個了,輸入: aspnet_regsql.exe -ssadd
提示:請指定用戶ID,或對受信任的連接使用-E
輸入如下:aspnet_regsql.exe -ssadd -E
成功.
也可以指定用戶名:aspnet_regsql.exe -ssadd -S 數據庫實例名(可指定遠程服務器) -U 登錄名 -P 密碼
會提示輸入密碼.正確輸入后也會執行成功.
刪除該功能的話執行aspnet_regsql.exe -ssremove -E
就OK了.
然后就是在你項目config下<system.web>節點下修改sessionState 配置為<sessionState mode="StateServer" sqlConnectionString="data source=.;userid=sa;password=svse;Trusted_Connection=yes" timeout="720"/>
注:只需要在你保存的session的服務器數據庫執行一次就OK了,並且你所有部署網站的服務器需要打開ASP.NET 狀態服務 (ASP.NET state service)