[英]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.