0

我工作的地方是将几个 Web 应用程序(WebForm 和 MVC)迁移到 Web 农场。会话将由 SQL Server 管理。

问题永远是遗留问题!

对于那些更容易使用会话、存储字符串、返回等的情况,代码将保持不变。当在某些特定情况下,List<typed>会话中存储了不可序列化的对象等时,问题就开始了。

我正在考虑以一种 DRY 风格重构这一切。

大多数存储在会话中的列表都是由实体框架查询产生的集合。老实说,我不知道它周围是否有任何捷径。立即快速想到的唯一解决方案是在遗留系统的数据库中创建一个表并存储这些对象 - 然后创建一些机制来偶尔删除不活动的行。

所以在任何地方使用:Session["mList"] = myList;

我会交易:CustomSession.AddsInDatabase("mList", myList);

妥善照顾登录用户、插入时间等。

这是一个很好的选择,还是有其他的?

:)

4

1 回答 1

0

您是否出于某种原因不想使用 Microsoft 实现的SQL Server Session-State 提供程序

如果是,那么我建议实施自定义会话状态提供程序。如果您采用自定义路线,我建议您始终将会话值作为二进制 blob 存储在数据库中,并在调用之间使用 aBinaryWriterSessionStateItemCollection.Serialize序列化和反序列化,这样您就不必对对象的类型做出任何假设你正在存储。

您可以检查MSDN 中自定义提供程序的这个示例实现,以了解在实现继承自SessionStateStoreProviderBase.

于 2012-08-08T20:00:53.720 回答