2008-10-28 78 views
1

如你所知,在ASP.NET中,可以存储会话数据在以下三种模式之一:ASP.NET会话状态服务器 - 保存序列化的数据

  • 是InProc
  • 会话状态
  • SQL服务器

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

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

此门户内部存储会将未反序列化的对象存储在会话上下文中(即存储的对象不实现ISerializable接口)的问题。我无法访问他们的代码。是否有任何解决方法,以便我可以将会话对象存储在状态服务器中而不更改其代码。如果这有助于任何形式的话,我仍然可以访问他们的web.config文件。

回答

1

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

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

+0

实际上,我们无法访问代码,因为它是第三方.NET门户。我们只能在web.config中进行更改。 关于你的评论,我们可以包含一个包装作为外部程序集/ DLL,并对web.config进行更改,以便将此包装用于对象会话存储? – mohammedn 2008-10-28 12:51:10

+0

不是我所知道的;你将不得不改变页面代码。所以,如果你没有访问权限,你有点困惑。 – 2008-10-28 13:22:37

1

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

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

做出这种回答更多的帮助或直接的问题在手:

您不能连载已经不以某种方式为可序列被delcared的对象。任何其他通用的重新创建对象的方式都可能导致对象与“串行化”之前的状态不同。如Marc所说,你可以通过创建你自己的可序列化的'wrapper'来实现,但你需要对所讨论的对象非常熟悉,并且对象需要有方法来允许它成为以这种方式重新创建。