【发布时间】:2011-12-22 04:46:02
【问题描述】:
我正在使用StructureMap 来存储会话对象:
config.For<SessionContext>().LifecycleIs(new HttpSessionLifecycle());
一切正常,所以我可以使用DI 轻松检索会话对象。
但现在我需要将会话从进程内切换到数据库,但收到以下错误。
无法序列化会话状态。在“状态服务器”和 'SQLServer' 模式,ASP.NET 将序列化会话状态对象, 结果是不可序列化的对象或 MarshalByRef 对象 不允许。如果类似的序列化,同样的限制适用 由自定义会话状态存储在“自定义”模式下完成。 ---> System.Runtime.Serialization.SerializationException:类型 程序集“StructureMap”中的“StructureMap.Pipeline.MainObjectCache”, 版本=2.6.2.0,文化=中性,PublicKeyToken=e60ad81abae3c223' 是 未标记为可序列化。
我该如何解决这个问题?
【问题讨论】:
-
为什么要减去?谁能解释一下?
-
会话中的每个对象是否都标记为
[Serializable]? -
@Jay:是的,我所有的课程
Serializable。结构映射中的问题,它以某种方式将会话对象与无法序列化的类包装在一起,请参见上面的错误。 -
为什么要在容器中使用会话上下文?您正在尝试将会话存储在会话中 - 这对我来说似乎是错误的。如果您说明您的需求,我相信会有更好的解决方案。
-
@JoshuaFlanagan:我不想在会话中存储会话。我的课程
SessionContext只包含简单的属性(int、string)。我正在尝试通过结构映射 HttpSessionLifecycle 将其存储在会话中。如果会话在内存中,一切正常。但是当我尝试将会话存储在数据库中(会话项应该是可序列化的)时,我收到了上述错误。似乎结构图包装了会话项目。
标签: c# asp.net-mvc-3 session serialization structuremap