2009-11-28 120 views
0

我們正在試圖獲得會話狀態使用以下web.config行工作:Asp.net會話狀態服務器

<sessionState 
    mode="SQLServer" 
    stateConnectionString="tcpip=127.0.0.1:42424" 
    sqlConnectionString="Data Source=dbServer;User ID=stateUser;Password='thepassword'" 
    cookieless="false" 
    timeout="20"/> 

在DBSERVER,我們運行以下命令來設置ASPState的DB:

aspnet_regsql.exe -S localhost-E -ssadd -sstype p 

在Web服務器上,我們已經開始在ASP.Net狀態服務,但是,沒有記錄表ASPStateTempApplications或ASPStateTempSessions顯示出來,它似乎非常像會話仍然被存儲在過程。

怎麼了?狀態服務應該在數據庫服務器上運行嗎?它是否與IIS一起安裝,因爲它在該機器上不可用,儘管安裝了.NET 3.5.1。

IIS日誌顯示沒有提示失敗。怎麼了?

回答

4

首先,您不需要啓動狀態服務以便使用SQL Server會話狀態。忘記ASP.NET狀態服務。

您確定您的網站正在創建會話變量嗎?僅僅因爲你把這些改變放到你的web.config中,如果你從不使用會話變量,它將不會被使用。

+0

賓果。我的印象是會話狀態也負責維護表單身份驗證(我在平衡器下運行一些服務器)。會話狀態確實正在保存(只在我測試的頁面上未使用)。我實際上需要做的是設置相同的machineKey鍵以保護身份驗證,因爲用戶在我的場的節點之間分流。嚴重的RTFM病例。 – spender 2009-11-29 03:12:53

4

如果確實沒有周圍的密碼報價,試圖將其刪除:

sqlConnectionString="Data Source=dbServer;User ID=stateUser;Password=thepassword" 

並刪除以下行,它具有SQL會話存儲無功能:

stateConnectionString="tcpip=127.0.0.1:42424" 

,你可能會爲停止國家的服務;它需要進程外會話狀態,而不是SQL Server會話狀態。

此外,SQL Server會話狀態要求您在數據庫上運行InstallSqlState.sql,而不是aspnet_regsql.exe。它應該創建一個新的數據庫ASPState

+0

我同意這個答案,除了最後一行。 **不要**嘗試手工運行InstallSqlState.sql;它被設計爲由aspnet_regsql.exe運行;在文件頂部甚至有評論說同樣的事情。 – RickNZ 2009-11-29 00:57:30

+0

+1不需要州政府服務。看到marcc的帖子下的評論,瞭解我的愚蠢! – spender 2009-11-29 03:11:12

0

如何編寫一個小的HttpModule?當您需要將用戶轉換到新的代碼庫時,您可以將其放置一段時間。該模塊可以對每個頁面請求做一些工作來檢查用戶的會話並決定是否需要放棄。也許您在會話第一次創建時將應用程序版本字符串存儲在用戶會話中,並將當前應用程序版本字符串與該會話進行比較。