ASP.NET会话状态服务器 - 保存未序列化的数据

时间:2008-10-28 12:33:45

标签: c# .net session state

如您所知,在ASP.NET中,您可以使用以下三种模式之一存储会话数据:

  • 是InProc
  • 会话状态
  • SQL Server

对于InProc模式,您可以存储任何类型的数据对象,即使它不可序列化。但是,在会话状态和SQL Server模式下,您只能存储序列化数据。

在我的项目中,我有一个现成的门户网站,它使用“InProc”模式来存储其会话。由于一些可伸缩性和故障处理问题,我需要使用会话状态。

此门户网站在会话上下文中内部存储未序列化对象的问题(即存储的对象未实现ISerializable接口)。我无法访问他们的代码。是否有任何解决方法,以便我能够在不更改其代码的情况下将会话对象存储在State Server中。我仍然可以访问他们的web.config文件,如果这会有任何帮助。

2 个答案:

答案 0 :(得分:1)

AFAIK,简单的答案是否定的。如果您不介意更改代码,可以在实际对象和您的代码之间注入一个包装器对象,并让您的包装器处理包装对象的序列化(基本上作为序列化代理) - 但到那时它几乎会更容易只需重新编写代码......

他们是什么类型的对象?通常,会话状态的对象是简单的数据类,因此序列化它们不应该有太多问题吗?

答案 1 :(得分:1)

序列化创建对象的表示,可以存储和读取该对象以重新创建对象的状态。

如果一个对象只包含值类型,那么您可能不需要实现ISerializable,但只需要[Serializable]属性。

让这个回复对手头的问题更有帮助或更直接:

您无法将未以某种方式进行delcared的对象序列化为可序列化。重新创建对象的任何其他通用方法可能导致对象不具有与“序列化”之前相同的状态。

正如Marc所提到的,你可以通过创建自己的可序列化“包装器”来实现它,但是你需要对相关对象非常熟悉,并且对象需要有方法可以让它重新开始 - 以这种方式创造。