我在尝试使用会话状态服务器而不是InProd时遇到序列化错误。但是,我无法弄清楚导致会话错误的原因。我给了一些代码添加到页面循环遍历会话对象,并确定其中的每个项目是否可序列化。我的问题是我不知道将代码放在ASP.NET页面中的哪个位置。在跟踪代码时,错误只是在逐步浏览页面外的对象后出现,而不是在设置会话时出现。必须有一些地方可以将代码放在页面上,该页面是在设置了所有会话对象之后但在页面出错之前。那会是哪里?
答案 0 :(得分:0)
你可以把它放在页面加载中,设置一个断点,然后逐步执行反序列化代码,直到barf为止 - 它会告诉你哪个对象还不是可序列化的,并阻止过渡使用SQL进行会话。没有你给出的源代码来测试序列化是很难说的。
通过思考你在这里尝试做什么可能会有所帮助。因为SQL State Server要求对象是可序列化的,而InProc不需要,所以放入Session的任何对象都需要是Serializable。
因此,您要验证您在Session中存储的任何对象是否可序列化,或者正如另一个应答者所说,确定哪个对象不可序列化并导致问题。
test whether an object can be Serialized很容易。您可以使用您给出的示例代码,或者只是创建一个单元测试(或者在您的应用程序的页面加载中测试,如果这更容易),它将您在会话中存储的各种类型测试为可序列化。
答案 1 :(得分:0)
这个问题的答案是将代码放在SaveStateComplete事件处理程序中。