標籤:style blog http 使用 os io strong 檔案
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關聯的資料庫伺服器資訊,注意這裡選擇的資料庫,在往後的ASP.NET應用程式中是可以改變的。填入完成之後選擇“下一步”之後還有兩個介面,不過在那兩個介面中只需要“下一步”,沒有可選擇的資訊,所以這裡不列出來了。 2)配置工作階段狀態使用的資料庫庫。正如剛才所說,使用資料庫儲存會話也分三種方式,臨時資料庫(SQL Server重啟後會遺失資料)、ASPState資料庫和自訂資料庫。注意 -ssadd, -E, -sstype 指令。
-ssadd 指令的功能是添加會話資料庫,預設是添加到臨時資料庫
-E 指令的功能是使用WINDOWS身分識別驗證,因為我示範的SQL Server在本機上,所以使用該指令才能串連,單獨的 -ssadd是運行不了的。
-sstype 指令的功能是指定工作階段狀態使用哪個資料庫。隨後的參數有 t、p‘和c ,分別為臨時資料庫,ASPState資料庫庫和自訂資料庫。
-d 的功能是在指定自訂資料庫的時候,指定該資料庫的名稱,以資料庫名稱做參數。
使用臨時資料庫儲存工作階段狀態的指令:臨時資料庫中多了兩個用於儲存工作階段狀態資訊的表。
使用ASPState資料庫儲存工作階段狀態的指令:執行之後,在資料庫中出現了新的資料庫ASPState。其中帶有的表跟之前在臨時資料庫中的一致。
使用自訂資料庫TestCustom資料庫儲存工作階段狀態的指令:除了擁有上述的表之外,還帶有一系列自動添加上去的預存程序,其實這些預存程序不是自訂資料庫才特有的。無論使用哪種資料庫,都會有這些預存程序,只是當從一種資料庫改到另一種資料庫的時候,表會留下來,但預存程序就會全部轉移到新使用的資料庫中。 想要取消使用以上的設定,只需要-ssremove -E指令。以上這些只能在原生資料庫中建立會話資料庫,但正規的操作是不應該在資料庫伺服器上直接進行這些操作,很可能該伺服器上根本沒有ASP.NET的組件。因此我們需要從ASP.NET程式的部署伺服器,通過遠端連線來進行配置,以下將示範這一執行個體,通過我的電腦串連到團隊成員的遠端電腦上。 要先說明,在CMD中運行aspnet_regsql.exe,要進行遠端連線,需要使用-S -U -P指令,分別指定:資料庫伺服器名稱/地址、串連使用的帳號和密碼。同時必須註明,要在SQL Server中配置會話資料庫,必須具有
建立表格,建立資料庫,建立預存程序,和MSDB的RSExecRole角色許可權。否則配置過程一定會出錯。
以上配置指令在 119.120.74.150的機器上,使用帳號密碼均為silin建立串連,然後建立一個自訂資料庫TestCustom來儲存工作階段狀態。 以上就是關於ASP.NET使用SQL Server的配置。接下來是設定檔的修改。
修改ASP.NET程式的設定檔: 在ASP.NET的設定檔中找到<sessionState>區段,很可能沒有這個區段,因為存在預設設定,這裡假設沒有這個區段,重新寫入。 <sessionState mode="SQLServer" sqlConnectionString="所需連接字串" /> 只需要這麼簡單的設定。當然還有其他設定,但要起到作用,最少只需要這兩個屬性設定就OK了。 完成上述設定之後,在程式中的存取的會話資料就會自動儲存到資料庫中,整個編碼過程沒有任何改動。ASP.NET的這個提供者機制,的確把代碼實現跟資料儲存方式分離了。不過要注意,當把工作階段狀態儲存到ASP.NET運行進程以外的介質時,必定會進行序列化和還原序列化,因此必須注意工作階段狀態中儲存的類型是否能夠進行序列化。