Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET会话状态服务器-保存未序列化的数据_C#_.net_Session_State - Fatal编程技术网

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

C# ASP.NET会话状态服务器-保存未序列化的数据,c#,.net,session,state,C#,.net,Session,State,如您所知,在ASP.NET中,您可以以下三种模式之一存储会话数据: InProc 会话状态 SQL Server 对于InProc模式,您可以存储任何类型的数据对象,即使它不可序列化。但是,在会话状态和SQL Server模式下,只能存储序列化数据 在我的项目中,我有一个现成的门户,它使用“InProc”模式存储会话。由于一些可伸缩性和故障处理问题,我需要使用会话状态 该门户在会话上下文中内部存储未序列化对象的问题(即存储的对象未实现ISerializable接口)。我无法访问他们的代码。是

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

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

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


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

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


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

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

如果对象仅包含值类型,则可能不需要实现ISerializable,而只需要[Serializable]属性

要使此回答对手头的问题更有用或更直接,请执行以下操作:

不能序列化未以某种方式被删除为可序列化的对象。任何其他重新创建对象的通用方法都可能导致对象的状态与“序列化”之前的状态不同


正如Marc所提到的,您可以通过创建自己的可序列化“包装器”来实现这一点,但您需要更加熟悉所讨论的对象,并且该对象需要有允许以这种方式重新创建的方法。

实际上,我们没有访问代码的权限,因为它是第三方.NET门户。我们只能在web.config中进行更改。关于您的评论,我们是否可以将包装器作为外部程序集/DLL,并对web.config进行更改,以将此包装器用于对象会话存储;您必须更改页面代码。所以如果你没有访问权限,你就有点泄气了,-1不是我写的,但我猜既然代码不能修改,那么它是ISerializable还是[Serializable]都没关系。也就是说,我同意你的观点是正确的,所以我将+1它来平衡事情-p@mnour-嗯;我可能会在用户语音上留言。。。这本身可能没有帮助,但也不是毫无帮助。。。也许标签应该改为主动的“无用”,而不是中性的“无用”。(如果你看到区别的话)嗨,马克,谢谢你的提醒。我已经更新了我的回复,试图更具相关性,但这并不能解决问题。正如你提到的,我同意这个问题无法解决。我有一个建议,哈哈。实际上,只要图中的每个对象都是可序列化的,引用也应该与[Serializable]一起工作。