IIS Express停止时如何获取会话存储的值

时间:2017-01-25 14:14:18

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

我有一个ASP.Net MVC - 5应用程序,并且在我在Session中存储值的地方之一

System.Web.HttpContext.Current.Session["MyValue"] = user.SessionID;

我能够以

的形式访问该值

int x = (int)System.Web.HttpContext.Current.Session["MyValue"];

但是当我停止IIS Express时,我想访问相同的值。我知道从Application_End调用Global.asax

  protected void Application_End()
        {
           int x = (int)System.Web.HttpContext.Current.Session["MyValue"];
        }

x 的值为null。是否有任何特殊原因在Application_End()中无法使用会话值。我在这里错过了什么吗?

2 个答案:

答案 0 :(得分:2)

在调用Application_End时,会话已经处理完毕。如果您需要在IISExpress完全停止之前获取信息,请尝试使用Session_End。

https://msdn.microsoft.com/en-us/library/system.web.sessionstate.sessionstatemodule.end(v=vs.110).aspx

答案 1 :(得分:1)

默认情况下,会话存储在内存(InProc)模式下。当您的应用程序关闭时,将擦除与其关联的所有内存。这意味着您可能已存储在会话中的所有内容都已消失。这就是为什么在生产中你绝对不应该使用InProc模式而是将存储卸载到单独的服务或SqlServer的原因。如果由于某种原因您的应用程序被IIS回收(例如由于某些不活动或高负载),则所有会话数据都将消失。