.NET MVC5会话没有结束

时间:2014-06-11 14:58:09

标签: c# .net asp.net-mvc asp.net-mvc-5

我是.NET的新手,我遇到以下问题。我正在使用窗口身份验证的内部应用程序。 我需要创建一个临时对象,并在会话期间将其存储在数据库中。会话结束后,我不再需要该对象。

我在Session_start中创建了用于创建对象的代码,并在Session_end中创建了用于销毁它的代码。

    protected void Session_Start(Object sender, EventArgs e)
    {
        MyDbContext db = new MyDbContext ();
        MyObject o = new MyObject () { Temporary = 1 };
        db.MyObjects.Add(o);
        db.SaveChanges();
        HttpContext.Current.Session.Add("my_object_id", o.ID);
    }

    protected void Session_End(Object sender, EventArgs e)
    {
        MyDbContext db = new MyDbContext ();
        try
        {
            MyObject o = db.MyObjects.Find(HttpContext.Current.Session["my_object_id"]);
            db.MyObjects.Remove(o);
            db.SaveChanges();
        }
        catch (Exception)
        {
            //do nothing
        }
    }

我的配置文件中还有以下xml条目

    <sessionState mode="InProc" timeout="30" />

我的问题是这些对象正在创建但从未被销毁过。目前,我们在开发服务器上托管我们的应用程序,并在Visual Studio内部iisexpress服务器本地运行它。

我将尝试添加某种日志记录,以查看是否正在调用session_end。此应用程序不具有任何类型的注销机制(具有Windows身份验证的内部应用程序)。

我不确定我是否正确行事。任何帮助,将不胜感激。

1 个答案:

答案 0 :(得分:4)

确保应用程序池超时大于会话超时。否则,在调用Session_End方法之前,应用程序池将被回收(如果您的站点没有多个访问者)。

您可以在此处找到设置:

http://bradkingsley.com/iis7-application-pool-idle-time-out-settings/