当会话存储在数据库中时,是否可以重命名会话变量?

时间:2019-01-22 16:24:44

标签: c# asp.net-mvc session session-variables

我们有一个MVC应用程序,该应用程序在某种程度上非常依赖于在会话中存储内容(不是我的设计)。此应用程序在生产中的两台服务器之间实现负载平衡。在测试中,我们只有一台服务器。我们将用户会话存储在数据库中,以防止用户在部署过程中被踢。这是一个高可用性应用程序,因此中断次数越少越好。

我们在会话中存储的一件事是一个类的实例。让我们将类称为Foo:

public class Foo 
{
    public int Bar { get; set; }
}

我试图重构一些代码,最终将Bar重命名为BarId,这样其目的就更加清楚了。在开发和测试中,一切看起来都不错。但是,当我们开始部署到生产环境时,用户开始收到空引用异常。该错误发生在从会话中检索Foo的代码行中。代码看起来像这样:

If(Session["foo"] != null)
{
     var foo = (Foo)Session["foo"];

     using(var context = new BarContext())
     {
         _barRepo = new GenericRepository<Bar>(context);
         _bar = _barRepo.GetById(foo.Bar);
     }
}

最终发生的是,尽管Session["foo"]不为null,但未成功将其转换为Foo类型的对象,因此foo为null。转换失败的原因是,会话对象仍然具有Bar成员而不是Foo类中的BarId成员。

这很难测试,但是当我将BarId重新命名为Bar时,该问题已解决,因此我可以确定这是原因。

我的问题是:是否有一种方法可以对此类或任何其他会话变量进行更改,而不必通过删除会话来使所有用户退出应用程序?

0 个答案:

没有答案