當會話狀態模式爲“StateServer”或“SQLServer”時,不允許使用無法序列化的對象或 MarshalByRef 對象

  當在ASP.Net的web.config中,將SessionState的mode定義成StateServer或者SQLServer,然後在用戶登錄過程中保存一個用戶對象objUserData,發生以下錯誤提示:

“/WebFramework.Web”應用程序中的服務器錯誤。


無法序列化會話狀態。請注意,當會話狀態模式爲“StateServer”或“SQLServer”時,不允許使用無法序列化的對象或 MarshalByRef 對象。

說明: 執行當前 Web 請求期間,出現未處理的異常。請檢查堆棧跟蹤信息,以瞭解有關該錯誤以及代碼中導致錯誤的出處的詳細信息。

異常詳細信息: System.Web.HttpException: 無法序列化會話狀態。請注意,當會話狀態模式爲“StateServer”或“SQLServer”時,不允許使用無法序列化的對象或 MarshalByRef 對象。



  我從網上查找相關資料,找到了問題的原因:
  在StateServer或者SQLServer模式的時候保存在Session裏面的對象必須支持序列化!如果是內置的類創建的對象,則必須是支持序列化的對象;如果是自己定義的類創建,則可以在定義該類的時候標識如下:
   [Serializable]   
       public      class      YourClass   
   {   
            //class      code
       }
  [Serializable] 標識該類創建的對象是可以序列化的。
  於是,我在UserData類的定義前加上這個標識,問題解決!
  至於,什麼是序列化?爲什麼Session在這兩種狀態下必須保存序列化對象?還有,什麼叫MarshalByRef 對象?有待繼續研究。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章