【问题标题】:Structure map HttpSessionLifecycle object serialization结构图 HttpSessionLifecycle 对象序列化
【发布时间】: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


【解决方案1】:

问题出在 StructureMap 中。我已将 [Serializable] 属性添加到 MainObjectCache 类和其他一些类并对其进行了测试。现在可以了。修复可以在this pull request 中找到。

希望@Joshua Flanagan 尽快将这些更改合并到主分支中,最终解决问题。

编辑:

谢谢,我已经提取了您的更改(以及其他一些更改)并推送了 2.6.3 发布。编辑您的答案,说这是 2.6.3 中修复的错误,并且 将其标记为已接受的答案。 ——约书亚·弗拉纳根

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-06
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    • 2016-05-27
    • 2020-08-21
    相关资源
    最近更新 更多