我工作的地方是将多个Web应用程序(WebForm和MVC)迁移到Web场。该会话将由SQL Server管理。
问题永远存在!
对于那些更容易使用会话,存储字符串,返回等的情况,代码将保持不变。在某些特定情况下,问题开始时,会话中存储了List<typed>
个不可序列化的对象等。
我正在考虑以干燥的方式重构这一切。
会话中存储的大多数列表都是实体框架查询产生的集合。老实说,我无法弄清楚周围是否有任何捷径。立即,快速地想到的唯一解决方案是在遗留系统的数据库中创建一个表并存储这些对象 - 然后创建一些机制来偶尔删除非活动行。
所以在任何地方使用:Session["mList"] = myList;
我会交易:CustomSession.AddsInDatabase("mList", myList);
妥善保管登录用户,插入时间等。
这是一个好的选择,还是有其他人?
:)
答案 0 :(得分:0)
是否有某些原因您不想使用Microsoft实施的SQL Server Session-State provider?
如果是,那么我建议implementing a custom session-state provider。如果您使用自定义路由,我建议您始终将会话值存储为数据库中的二进制blob,并使用BinaryWriter
和SessionStateItemCollection.Serialize
来序列化和反序列化调用,这样就不会必须对你要存储的对象类型做出任何假设。
您可以从MSDN中查看此example implementation of a custom provider,以了解实施从SessionStateStoreProviderBase
继承的类所涉及的工作类型。