1

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

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

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

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

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

谢谢

4

1 回答 1

4

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

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

替代方案不会喜欢您:编写自定义会话状态提供程序,您可以在其中控制会话状态对象的序列化,但这通常是矫枉过正。

于 2013-09-19T11:11:05.883 回答