我们有相当大规模的应用程序和最近遇到的随机注销问题。经过调查,我们发现在达到物理内存限制(1GB)后,应用程序池正在回收。我现在正试图在进程外保存会话状态,如下所示
<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" cookieless="false" timeout="20"/>
将会话状态模式更改为“StateServer”并在服务器上运行asp.net状态服务。我收到以下错误消息
“无法序列化会话状态。在'StateServer'和'SQLServer'模式下,ASP.NET将序列化会话状态对象,因此不允许使用不可序列化的对象或MarshalByRef对象。同样的限制适用如果自定义会话状态存储在“自定义”模式下完成类似的序列化。“
显然我必须使用[Serializable]属性标记与会话相关的对象,但应用程序非常大。有没有解决这个问题的方法?
感谢
答案 0 :(得分:4)
有没有解决这个问题的方法?
不,您必须分析参与对象图的所有对象,并将其存储到会话中并使用[Serializable]
属性进行装饰。
替代方案不会像你一样:编写一个自定义会话状态提供程序,您可以控制会话状态对象的序列化,但这通常是一种过度杀伤。