【问题标题】:How to fetch session stored value when IIS Express stopsIIS Express 停止时如何获取会话存储值
【发布时间】:2017-06-10 18:21:40
【问题描述】:

我有一个 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 的值是空的。是否有任何特殊原因导致 Application_End() 中的会话值不可用。我在这里错过了什么吗?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • @Unbreakable:请记住,只要一切都按预期运行,这仍然有效。如果 App Pool 崩溃,服务器意外关闭(例如电源故障),则没有机会捕获任何内容。我不确定您要将此用于什么目的,但请确保它不是应用程序要求。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2018-06-15
      • 2012-11-19
      • 1970-01-01
      • 2018-11-21
      • 2023-02-14
      • 1970-01-01
      • 2021-12-16
      • 1970-01-01
      • 2012-03-06
      相关资源
      最近更新 更多