无法序列化会话状态

本文关键字:会话状态 序列化 | 更新日期: 2023-09-27 18:32:02

我们有相当大规模的应用程序,最近遇到了随机注销的问题。经过调查,我们发现在达到物理内存限制 (1GB) 后,应用程序池正在回收。我现在正在尝试将会话状态保存在进程外,如下所示

<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" cookieless="false" timeout="20"/>

将会话状态模式更改为"状态服务器"并在服务器上运行 asp.net 状态服务后。我收到以下错误消息

"无法序列化会话状态。在"StateServer"和"SQLServer"模式下,ASP.NET 将序列化会话状态对象,因此不允许使用不可序列化的对象或 MarshalByRef 对象。如果自定义会话状态存储在'自定义'模式下执行类似的序列化,则相同的限制适用。

显然我必须使用 [可序列化] 属性标记与会话相关的对象,但应用程序非常大。有没有办法解决这个问题?

谢谢

无法序列化会话状态

有没有办法解决这个问题?

不,您必须分析参与存储到会话中的对象图中的所有对象,并使用 [Serializable] 属性修饰它们。

另一种选择不会喜欢你:编写一个自定义会话状态提供程序,您可以在其中控制会话状态对象的序列化,但这通常是矫枉过正。