當在ASP.Net的web.config中,將SessionState的mode定義成StateServer或者SQLServer,然後在用戶登錄過程中保存一個用戶對象objUserData,發生以下錯誤提示:
“/WebFramework.Web”應用程序中的服務器錯誤。
無法序列化會話狀態。請注意,當會話狀態模式爲“StateServer”或“SQLServer”時,不允許使用無法序列化的對象或 MarshalByRef 對象。
說明: 執行當前 Web 請求期間,出現未處理的異常。請檢查堆棧跟蹤信息,以瞭解有關該錯誤以及代碼中導致錯誤的出處的詳細信息。
異常詳細信息: System.Web.HttpException: 無法序列化會話狀態。請注意,當會話狀態模式爲“StateServer”或“SQLServer”時,不允許使用無法序列化的對象或 MarshalByRef 對象。
異常詳細信息: System.Web.HttpException: 無法序列化會話狀態。請注意,當會話狀態模式爲“StateServer”或“SQLServer”時,不允許使用無法序列化的對象或 MarshalByRef 對象。
我從網上查找相關資料,找到了問題的原因:
在StateServer或者SQLServer模式的時候保存在Session裏面的對象必須支持序列化!如果是內置的類創建的對象,則必須是支持序列化的對象;如果是自己定義的類創建,則可以在定義該類的時候標識如下:
[Serializable]
public class YourClass
{
//class code
}
public class YourClass
{
//class code
}
[Serializable] 標識該類創建的對象是可以序列化的。
於是,我在UserData類的定義前加上這個標識,問題解決!
至於,什麼是序列化?爲什麼Session在這兩種狀態下必須保存序列化對象?還有,什麼叫MarshalByRef 對象?有待繼續研究。