天天看點

[ASP.NET]配置使用SQL Server儲存會話狀态

  會話狀态是ASP.NET應用程式狀态的其中一種,這種狀态的特點是以使用者為機關,每個會話對應一個使用者,也就是說在該使用者的整個通路過程,會話狀态儲存的資料都會持續儲存于伺服器的媒體中,直到會話逾時(即使用者超過指定時間沒有存取會話資料)。在伺服器端儲存會話狀态的方式有幾種,分别為:

1)InProc——這種方式會話狀态儲存在ASP.NET運作程序内,具體位置就是ASP.NET的Cache(高速緩存)内。

2)StateServer——這種方式會話狀态儲存在ASP.NET所帶有的Wiindows服務程序中,該服務預設是禁用的,需要人手啟動。

3)SQL Server——這種方式會話狀态儲存到SQL Server所管理的資料庫中。具體又可以分為儲存在臨時資料庫,ASPState資料庫和自定義資料庫三種方式。

4)自定義提供程式——這種方式要求開發人員自己開發會話狀态的提供程式,會話狀态的存取方式完全由該提供程式決定,由此可以儲存在其他SQL資料庫,或者XML檔案,甚至文本檔案中都可以。

本文目的在于說明怎樣配置使用SQL Server來儲存會話狀态。

整個配置過程分為兩部分:

第一部分,在ASP.NET程式運作的伺服器上,配置所使用的資料庫伺服器。

第二部分,在ASP.NET程式的配置檔案中修改會話狀态的儲存方式。

配置所使用的資料庫伺服器:

1)運作aspnet_regsql.exe程式,該程式位于目錄C:\WINDOWS\Microsoft.NET\Framework\<ASP.NET版本号>下。首先輕按兩下運作該程式,為ASP.NET配置SQL Server。

[ASP.NET]配置使用SQL Server儲存會話狀态

選擇“下一步”

[ASP.NET]配置使用SQL Server儲存會話狀态

選擇按圖中所示進行選擇,然後“下一步”

[ASP.NET]配置使用SQL Server儲存會話狀态

填入與ASP.NET關聯的資料庫伺服器資訊,注意這裡選擇的資料庫,在往後的ASP.NET應用程式中是可以改變的。填入完成之後選擇“下一步”

之後還有兩個界面,不過在那兩個界面中隻需要“下一步”,沒有可選擇的資訊,是以這裡不列出來了。

2)配置會話狀态使用的資料庫庫。

正如剛才所說,使用資料庫儲存會話也分三種方式,臨時資料庫(SQL Server重新開機後會丢失資料)、ASPState資料庫和自定義資料庫。

注意 -ssadd, -E, -sstype 指令。

    -ssadd 指令的功能是添加會話資料庫,預設是添加到臨時資料庫

    -E 指令的功能是使用WINDOWS身份驗證,因為我示範的SQL Server在本機上,是以使用該指令才能連接配接,單獨的 -ssadd是運作不了的。

    -sstype 指令的功能是指定會話狀态使用哪個資料庫。随後的參數有 t、p'和c ,分别為臨時資料庫,ASPState資料庫庫和自定義資料庫。

    -d 的功能是在指定自定義資料庫的時候,指定該資料庫的名稱,以資料庫名稱做參數。

使用臨時資料庫儲存會話狀态的指令:

[ASP.NET]配置使用SQL Server儲存會話狀态
[ASP.NET]配置使用SQL Server儲存會話狀态

臨時資料庫中多了兩個用于儲存會話狀态資訊的表。

使用ASPState資料庫儲存會話狀态的指令:

[ASP.NET]配置使用SQL Server儲存會話狀态
[ASP.NET]配置使用SQL Server儲存會話狀态

執行之後,在資料庫中出現了新的資料庫ASPState。其中帶有的表跟之前在臨時資料庫中的一緻。

使用自定義資料庫TestCustom資料庫儲存會話狀态的指令:

[ASP.NET]配置使用SQL Server儲存會話狀态
[ASP.NET]配置使用SQL Server儲存會話狀态

除了擁有上述的表之外,還帶有一系列自動添加上去的存儲過程,其實這些存儲過程不是自定義資料庫才特有的。無論使用哪種資料庫,都會有這些存儲過程,隻是當從一種資料庫改到另一種資料庫的時候,表會留下來,但存儲過程就會全部轉移到新使用的資料庫中。

想要取消使用以上的設定,隻需要-ssremove -E指令。

[ASP.NET]配置使用SQL Server儲存會話狀态

以上這些隻能在本機的資料庫中建立會話資料庫,但正規的操作是不應該在資料庫伺服器上直接進行這些操作,很可能該伺服器上根本沒有ASP.NET的元件。

是以我們需要從ASP.NET程式的部署伺服器,通過遠端連接配接來進行配置,以下将示範這一執行個體,通過我的計算機連接配接到團隊成員的遠端計算機上。

要先說明,在CMD中運作aspnet_regsql.exe,要進行遠端連接配接,需要使用-S -U -P指令,分别指定:資料庫伺服器名稱/位址、連接配接使用的帳号和密碼。

同時必須注明,要在SQL Server中配置會話資料庫,必須具有建立表格,建立資料庫,建立存儲過程,和MSDB的RSExecRole角色權限。否則配置過程一定會出錯。

[ASP.NET]配置使用SQL Server儲存會話狀态

以上配置指令在 119.120.74.150的機器上,使用帳号密碼均為silin建立連接配接,然後建立一個自定義資料庫TestCustom來儲存會話狀态。

以上就是關于ASP.NET使用SQL Server的配置。接下來是配置檔案的修改。

修改ASP.NET程式的配置檔案:

在ASP.NET的配置檔案中找到<sessionState>區段,很可能沒有這個區段,因為存在預設設定,這裡假設沒有這個區段,重新寫入。

<sessionState mode="SQLServer" sqlConnectionString="所需連接配接字元串" /> 隻需要這麼簡單的設定。當然還有其他設定,但要起到作用,最少隻需要這兩個屬性設定就OK了。

完成上述設定之後,在程式中的存取的會話資料就會自動儲存到資料庫中,整個編碼過程沒有任何改動。ASP.NET的這個提供程式機制,的确把代碼實作跟資料儲存方式分離了。不過要注意,當把會話狀态儲存到ASP.NET運作程序以外的媒體時,必定會進行序列化和反序列化,是以必須注意會話狀态中儲存的類型是否能夠進行序列化。