【发布时间】:2011-05-31 18:55:18
【问题描述】:
我需要使用外部会话状态服务器,这需要对我的所有会话进行序列化。我一直在尝试使用[Serializeable()] 属性使我存储在会话中的所有类都可序列化。
但是,我不断收到以下错误:
无法序列化会话状态。
在StateServer 和SQLServer 模式下,ASP.NET 将序列化会话状态对象,因此不允许使用不可序列化对象或MarshalByRef 对象。如果自定义会话状态存储在“Custom”模式下完成类似的序列化,则同样的限制也适用。
更有趣的是堆栈跟踪:
[SerializationException: Type 'ASP.useroverview_aspx' in Assembly 'App_Web_pwonykbc, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' 未标记为可序列化。]
System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(RuntimeType 类型) +9452985
System.Runtime.Serialization.FormatterServices.GetSerializableMembers(类型类型,StreamingContext 上下文)+247
System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo() +160
System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(对象 obj,ISurrogateSelector surrogateSelector,StreamingContext 上下文,SerObjectInfoInit serObjectInfoInit,IFormatterConverter 转换器,ObjectWriter objectWriter,SerializationBinder binder)+218
System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Write(WriteObjectInfo objectInfo, NameInfo memberNameInfo, NameInfo typeNameInfo) +388
System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(Object graph, Header[] inHeaders, __BinaryWriter serWriter, Boolean fCheck) +444
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph, Header[] headers, Boolean fCheck) +133
System.Web.Util.AltSerialization.WriteValueToStream(Object value, BinaryWriter writer) +1708
据我所知,ASP.useroverview_aspx 类型是一个 ASPX 页面。我加载的页面是Useroverview.aspx。但是,我不会尝试将此页面存储在会话中。所以这个错误让我很疑惑。
我尝试在代码隐藏中执行以下操作:
[Serializable()]
public partial class UserOverview : Page
{
private static readonly int TimerInterval = HttpContext.Current.IsDebuggingEnabled ? 2000 : 750;
// ...
}
这根本没有帮助!
所以我想知道是否可以序列化 ASPX 页面?这不知道这是否有意义。我怀疑!
谢谢...
【问题讨论】:
-
你为什么要把你的页面类存储在一个会话中?有些东西听起来不对。
-
看起来您已经在会话中存储了该页面的一个实例。在你的解决方案中快速搜索
Session,看看你是否能找到罪魁祸首。 -
我怀疑 Session 状态的对象之一有对页面的引用。
-
谢谢大家。另外,我看不到对象应该有引用的任何地方.. 呃!
标签: c# asp.net session serialization