要使用 SQL Server 當作 工作階段狀態 (Session State) 的提供者,只要下幾個指令並修改
web.config 即可完成,主要兩個步驟:
- 建立 工作階段狀態 (Session State) 所需的資料庫
- 修改 ASP.NET 網站的 web.config
一、建立 工作階段狀態 (Session State) 所需的資料庫
建立 Session State 專用的資料庫在安裝完
Microsoft .NET Framework 執行環境後就會有一支程式可以幫你自動建立所需的資料庫(注意:不需要安裝 SDK 就有這個工具),此工具程式的路徑如下:
C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_regsql.exe
在命令提示字元輸入
C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_regsql.exe -?
除了「SQL 連接選項」,在「工作階段狀態選項」–sstype 這個選項,他區分了三種支援的類型。
由於 ASP.NET 裡面的 Session State 經常會儲存一些重要的資訊,如果\沒有輸入 「–sstype」 選項的話,預設會是「 t(暫存)」,也代表著若是SQL
Server Restart或 Fail-over ,所有的 Session 資料就會遺失,因為 SQL Server 只要重新啟動就會重建
tempdb 系統資料庫,所有 Session 資料都會清空。
另一個指令在後面輸入「 p(永續性)」 來建立資料庫,這樣一來就算 SQL Server 重新啟動也不會導致 Session 資料流失的問題。
以下是幾個常見的指令執行範例:
請先在命令提示字元輸入下列指令
cd C:\Windows\Microsoft.NET\Framework\v2.0.50727
安裝工作階段狀態資料庫
* 使用 Windows 驗證連線
Exp:aspnet_regsql.exe -S 「DBServerName」 -U DBLogin -P 「DBPassword」 -A all -d 「DBName」
aspnet_regsql.exe -S ET-NBW8B\SQLEXPRESS
-E -ssadd -sstype p
* 使用 SQL Server 驗證連線
aspnet_regsql.exe -S . -U 帳號-P 密碼 -ssadd -sstype p
* 使用自訂的資料庫名稱
aspnet_regsql.exe -S ET-NBW8B\SQLEXPRESS -E -ssadd
-sstype c -d test
移除工作階段狀態資料庫
請先進入 C:\Windows\Microsoft.NET\Framework\v2.0.50727 目錄再執行以下指令:
* 使用 Windows 驗證連線
aspnet_regsql.exe -S . -E -ssremove -sstype p
* 使用 SQL Server 驗證連線
aspnet_regsql.exe -S . -U 帳號 -P 密碼 -ssremove -sstype p
在安裝完成之後,你會發現 SQL Server 會有一些物件與作業被建立,如下解說:
1. 預設資料庫名稱為 ASPState
2. 建立兩個資料表 ASPStateTempApplications 與
ASPStateTempSessions
4. 並且會在 SQL Server Agent 裡建立一個
ASPState_Job_DeleteExpiredSessions 作業,用來定時清理過期的 Session 資料,而且預設每分鐘就會自動執行一次:
想要得到建立完整 DDL 指令碼,使用下列指令匯出指令碼:
aspnet_regsql.exe -E -S . -ssadd -sstype p -sqlexportonly
c:\ ASPStateRecord.sql(檔名可自訂)
就可以看到 C:\ ASPStateRecord.sql 指令檔。
因為SQLEXPRESS 不支援 SQL Server Agent,這導致
Session 資料不會自動被清除,需設定到工作排程中定時執行,並且透過 sqlcmd 指令在 ASPState 資料庫執行以下預存程序:
EXECUTE DeleteExpiredSessions
筆者提供Express的支援一覽:
- 安裝
- 支援 Server Core 安裝。
- 支援多個執行個體(最高 50 個)。
- 高可用性
- AlwaysOn 功能僅支援資料庫鏡像的見證伺服器。
- 支援 Database Recovery Advisor。
- 安全性
- 支援基本稽核功能。
- 支援使用者定義角色(User-Defined Roles)。
- 支援自主資料庫(Contained Databases)。
- 複寫(Replication)
- 支援 SQL Server 變更追蹤(SQL Server change tracking)。
- 合併式複寫(Merge replication)僅支援訂閱者功能。
- 交易式複寫(MSDN 翻譯為異動複寫,Transactional replication)僅支援訂閱者功能。
- 快照式複寫(Snapshot replication)僅支援訂閱者功能。
- 管理工具
- 支援 SQL 管理物件(SQL Management Objects,SMO)。
- 支援 SQL 組態管理員(SQL Configuration Manager)。
- 支援命令提示字元工具(SQL CMD)。
- 不支援 SQL Profiler。
- 不支援 SQL Server Agent。
- RDBMS 管理能力
- 支援使用者執行個體(User Instances)。
- 支援專用管理員連接(Dedicated admin connection,DAC),但必須在追蹤旗標下使用。
- 支援 PowerShell 指令碼。
- 支援 SysPrep。
- 支援資料層應用程式元件作業(Support for Data-tier application component operations)。
- 部分支援分散式資料分割檢視(Distributed partitioned views)。
- 開發工具
- 支援整合 Microsoft Visual Studio。
- SQL Server Developer Studio。
- 支援 T-SQL 和 MDX 的 Intellisense 功能。
- 可程式性(Programmability)
- 支援整合 Common Language Runtime
(CLR) 。
- 支援 Native XML。
- 支援 XML 索引。
- 支援 Merge 和 Upsert 功能。
- 支援 FileTable。
- 支援 Date 和 Time 資料型態。
- 支援國際化(Internationalization)。
- 只支援 Service Broker (messaging) client。
- Integration Services
- SQL Server 匯入和匯出精靈。
- 支援內建的資料來源連接器(Built-in data source connectors)。
- 報表資料庫版本
- 必須安裝 Express with Advanced Services。
- 僅支援本機。
- 空間和位置服務(Spatial and Location Services)
- 支援空間索引(Spatial indexes)。
- 支援平面與Geodetic資料類型(Planar and Geodetic datatypes)。
- 支援進階空間程式庫(Advanced spatial
libraries)。
- 支援匯入/匯出業界標準空間格式(Import/export of industry-standard spatial data formats)。
- 其他資料庫服務
- 支援SQL Server 移轉小幫手(SQL Server Migration Assistan)。
- 限制
- 關聯式資料庫大小上限為 10 GB。
- 使用記憶體上限為 1GB。
二、修改 ASP.NET 的 web.config
其 web.config 中使用 SQLServer 工作階段狀態模式的語法如下:
預設的 ASPState 資料庫名稱
<sessionstate mode="SQLServer" timeout="60" sqlconnectionstring="Data
Source=Server;Integrated-Security=SSPI;" cookieless="false">
自訂的資料庫名稱
<sessionState mode="SQLServer" allowCustomSqlDatabase="true" sqlConnectionString="Server=.;Database=ASPState;Integrated
Security=true" sqlCommandTimeout="60" cookieless="false" cookieName="ASP.NET_SessionId" timeout="60" />
-雲遊山水為知已逍遙一生而忘齡- 電腦神手
沒有留言:
張貼留言