C# 结构映射HttpSessionLifecycle对象序列化
我正在使用存储会话对象:C# 结构映射HttpSessionLifecycle对象序列化,c#,asp.net-mvc-3,session,serialization,structuremap,C#,Asp.net Mvc 3,Session,Serialization,Structuremap,我正在使用存储会话对象: config.For<SessionContext>().LifecycleIs(new HttpSessionLifecycle()); config.For().LifecycleIs(新的HttpSessionLifecycle()); 一切正常,因此我可以轻松检索会话对象 但是现在我需要将会话从进程中切换到数据库,但是我收到以下错误 无法序列化会话状态。在“StateServer”和 “SQLServer”模式,ASP.NET将序列化会话状态对象
config.For<SessionContext>().LifecycleIs(new HttpSessionLifecycle());
config.For().LifecycleIs(新的HttpSessionLifecycle());
一切正常,因此我可以轻松检索会话对象
但是现在我需要将会话从进程中切换到数据库,但是我收到以下错误
无法序列化会话状态。在“StateServer”和
“SQLServer”模式,ASP.NET将序列化会话状态对象,
因此,不可序列化对象或MarshalByRef对象是
不允许。如果存在类似的序列化,则同样的限制也适用
由自定义会话状态存储在“自定义”模式下完成。-->
System.Runtime.Serialization.SerializationException:类型
程序集“StructureMap”中的“StructureMap.Pipeline.MainObjectCache”,
版本=2.6.2.0,区域性=中性,PublicKeyToken=e60ad81abae3c223'是
未标记为可序列化
我怎样才能解决这个问题 问题出在StructureMap中。我已经向
MainObjectCache
类和其他一些类添加了[Serializable]属性,并对其进行了测试。现在可以了。可以在pull请求中找到修复
我希望@Joshua Flanagan能很快将这些更改合并到主分支中,最终解决问题
编辑:
谢谢,我已经把你的零钱(和其他一些零钱)收进来了,并且推了一个
2.6.3发布。编辑您的答案,说它是2.6.3中修复的错误,然后
将其标记为已接受的答案约书亚·弗拉纳根
为什么是负数?有人可以解释吗?会话中的每个对象都标记为
[Serializable]
?@Jay:是的,我所有的类都是可序列化的。结构映射中存在问题,它以某种方式将会话对象与无法序列化的类包装在一起,请参见上面的错误。为什么要将会话上下文放在容器中?您正在尝试将会话存储在会话中-我认为这是错误的。如果您解释您的需要,我相信有更好的解决方案。@JoshuaFlanagan:我不想在会话中存储会话。我的类SessionContext
只包含简单的属性(int,string)。我试图通过结构映射HttpSessionLifecycle将其存储在会话中。如果会话在内存中,一切正常。但当我试图在数据库中存储会话(会话项应该是可序列化的)时,我收到了上述错误。似乎结构映射包装了会话项。