代码之家  ›  专栏  ›  技术社区  ›  mohammedn

ASP.NET会话状态服务器-保存未分类的数据

  •  1
  • mohammedn  · 技术社区  · 16 年前

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

    • 默认模式
    • 会话状态
    • SQL Server

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

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

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

    2 回复  |  直到 16 年前
        1
  •  1
  •   Mitch Wheat    16 年前

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

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

        2
  •  1
  •   Ady    16 年前

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

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

    为了使这个回答更有用或更直接地回答手头的问题:

    您不能序列化一个在某种程度上未被Delcare视为可序列化的对象。任何其他重新创建对象的通用方法都可能导致对象的状态与“序列化”之前的状态不同。

    正如马克所提到的,您可以通过创建自己的可序列化“包装器”来完成这项工作,但是您需要非常熟悉所讨论的对象,并且该对象需要具有允许以这种方式重新创建它的方法。