我是AppFabric Server缓存的新手,但在玩完它后,一切都像梦一样。 我可以将例如数据表添加到我的缓存中,然后将其恢复使用就好了。
我退出了这个功能并试图用一个包含登录会话数据(会话ID,日期等)的第三方供应商dll进行测试。
我使用方法创建了WCF服务,您可以使用此dll进行登录,并将该会话存储到我的缓存中。 这很好用,我可以通过查看PowerShell的缓存统计信息来验证这一点。 然后我创建了另一个应该获取此缓存会话并使用它来执行操作的方法。这就是我跑到墙上的地方。
我可以看到我已经能够从缓存中获取会话,但会话对象中的信息为空(会话ID,日期......)
我一直在为各地提供帮助,但是没有人接触过这个问题。 所以我的问题是
感谢所有可能的评论!
此致 米克
答案 0 :(得分:1)
在AppFabric中,您只能缓存可序列化的对象(或美国读者可序列化的对象:-))。您已经能够将会话对象存储在缓存中这一事实表明它们确实是可序列化的。但要弄清楚这里发生了什么,我们需要更深入地探讨一下。
默认使用binary serialisation,对象的所有字段/属性都是序列化的,公共和是私有的(而XML serialisation只会选择 public 价值观)。我们不知道AppFabric使用哪种序列化的风格,但二进制序列化往往更有效,因此它是一个合理的假设,即在封面下使用的是什么。但是,可以使用NonSerialized attribute覆盖序列化行为,以便标记为NonSerialized
的项目不会使其成为对象的序列化版本。 Selective Serialisation的MSDN页面明确建议应将安全敏感信息标记为不可序列化。
会话ID肯定属于安全敏感信息的标题,因为它是会话劫持的关键,所以我应该说这是您面临的问题。您可以通过使用ILDasm或Reflector查看第三方DLL内部来确认这一点,以查看会话类中的字段是否确实标记为未序列化。
你能绕过这个吗?当然,没有什么可以阻止你创建你自己的Session类,你从第三方的对象填充,你保持所有属性可序列化并缓存它。但请记住,你当时正在做他们试图阻止你做的事......