簡體   English   中英

ASP.NET會話狀態Sql Server模式

[英]ASP.NET Session State Sql Server mode

我的問題是關於上面寫的標題。 目前,我有一些依賴於Sessions來完成工作的功能。 將其保留為默認設置時,一切都會順利進行。 但是,我不喜歡在崩潰的情況下丟失會話的想法,並且我修改了web.config以改為使用Sql Server模式。

我已經運行了必要的命令,以使用aspnet_sql.exe在數據庫中創建表和存儲過程。

我能夠將值存儲到數據庫中,但尚未成功檢索它們。 由於它在InProc模式下可以正常工作,因此我可以確信我的代碼沒有錯。

這是我的web.config設置:

        <sessionState mode="SQLServer" allowCustomSqlDatabase="true" cookieless="false" timeout="120" sqlCommandTimeout="30" compressionEnabled="true" 
                                sqlConnectionString="Data Source=.\SQLExpress;Initial Catalog=mytest;Persist Security Info=True;User ID=mytest;Password=mytest;"/>

非常感謝您的幫助,在此先感謝您。

假定您的代碼沒有錯誤是不安全的。 我想到的一種情況是,正在緩存的對象未標記為可序列化的 通常,這會引發Exception,您會意識到的。 但是,如果您還要在catch塊中抑制異常,那么您似乎可以存儲值,但不能檢索它們。

為什么突然需要使所有對象可序列化? 好吧,當您使用InProc時,您的對象存儲在內存中。 但是,當您使用SQL時,需要將它們寫入(AKA序列化)到數據庫中。

在代碼中:

try {
    Session["MyKey"] = SomeNonSerializableObject
}
catch (Exception e)
{
    ' Suppress all exceptions 
}

我還要確認您的ASPState用戶(在您的示例中為mytest )具有他們所需的所有正確權限。 測試此問題的簡單方法是使它們成為ASPState數據庫 temp數據庫上的db_owner。 如果這解決了問題,那么您就知道這是數據庫權限問題。

為什么我聽到你問的tempdb? 好吧,默認情況下,會話狀態表將在tempdb中創建。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM