簡體   English   中英

ASP.NET 會話狀態服務器 - 保存未序列化的數據

[英]ASP.NET Session State Server - Saving Unserialized Data

如您所知,在 ASP.NET 中,您可以通過以下三種模式之一存儲會話數據:

  • 進程內
  • 會話狀態
  • 數據庫服務器

對於 InProc 模式,您可以存儲任何類型的數據對象,即使它是不可序列化的。 但是,在 Session State 和 SQL Server 模式下,您只能存儲序列化數據。

在我的項目中,我有一個現成的門戶,它使用“InProc”模式來存儲其會話。 由於一些可擴展性和故障處理問題,我需要改用會話狀態。

此門戶在會話上下文中內部存儲未序列化對象的問題(即存儲的對象未實現 ISerializable 接口)。 我無法訪問他們的代碼。 是否有任何解決方法,以便我可以在不更改其代碼的情況下將會話對象存儲在 State Server 中。 如果這有任何幫助,我仍然可以訪問他們的 web.config 文件。

AFAIK,簡單的答案是否定的。 如果你不介意改變你的代碼,你可以在實際對象和你的對象之間注入一個包裝器對象,讓你的包裝器處理序列化包裝的對象(基本上作為序列化代理) - 但到那時它幾乎會更容易只需重新編寫代碼...

它們是什么類型的物體? 通常,會話狀態的對象將是簡單的數據類,因此序列化它們應該不會有太多問題?

序列化創建對象的表示,可以存儲和讀取以重新創建對象的狀態。

如果一個對象只包含值類型,那么您可能不需要實現 ISerializable,而只需要 [Serializable] 屬性。

為了使此回復更有幫助或直接針對手頭的問題:

您不能序列化尚未以某種方式聲明為可序列化的對象。 任何其他重新創建對象的通用方法都可能導致對象與“序列化”之前的狀態不同。

正如 Marc 所提到的,您可以通過創建自己的可序列化“包裝器”來做到這一點,但是您需要非常熟悉所討論的對象,並且該對象需要具有允許它在中重新創建的方法這樣的方式。

暫無
暫無

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

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