代码之家  ›  专栏  ›  技术社区  ›  bgs264

丢失会话变量-什么异常可能导致会话丢失?

  •  2
  • bgs264  · 技术社区  · 15 年前

    我在生产系统上启用了运行状况监视(asp.netwebforms.NET4),我看到有很多错误被发送给我,表明会话变量已经丢失。

    (我正在尝试将某个非会话状态附加到实体框架数据上下文,并获取“Value cannot be null,parameter name entity”错误)。所以session变量现在包含null而不是对象。

    运行状况监视也在监视生存期事件,从中我可以看出,我们没有发生类似IIS回收、配置更改、bin文件夹更改、重新编译等情况。

    http://weblogs.asp.net/bleroy/archive/2004/08/03/Don_2700_t-redirect-after-setting-a-Session-variable-_2800_or-do-it-right_2900_.aspx

    我可以确认这不是一个响应。重定向问题,因为这没有发生-这是一个在线应用程序表单-它将一个对象置于页面加载的会话状态,并且有一个多视图-当按下“下一步”时,该对象脱离会话状态,附加到数据上下文,从web表单和数据上下文进行更改已更新。所以没有响应.重定向正在发生。

    我还探讨了会话超时发生的可能性,但它们应该由运行以检测会话超时的其他代码来处理(请参阅: http://blogs.msdn.com/b/nikhiln/archive/2007/06/21/detecting-session-timeout-in-asp-net-2-0-web-applications.aspx )我已经测试了一遍又一遍-问题的一部分是我自己不能重现这个错误。

    所以:-

    -不是IIS工作进程回收或任何其他会生成运行状况监视生存期事件的事情
    -不使用响应.重定向
    -没有web场/多个工作进程

    然后我发现了这个线索: http://bytes.com/topic/asp-net/answers/490975-disappearing-sessions 最有价值球员说:

    重新启动,所有会话都将重新启动 我也是。是的,一般来说 在重新编译期间发生 还有一些

    但遗憾的是,我们没有详细说明什么样的“主要未处理的应用程序级异常”可能会导致会话丢失-这是一个全新的系统,我们仍然有未处理的异常,我们正在努力修复-那么我们在这里谈论的是什么样的异常呢?一个人会话中的应用程序异常真的可以删除该应用程序持有的所有会话吗?

    这条线也触及它: http://bytes.com/topic/asp-net/answers/490975-sessions

    我见过的唯一相似的是 当运行时错误发生在 重新启动应用程序。你是吗 接收应用程序启动事件 我也是?

    所以我猜,如果我有一个运行时错误导致应用程序重新启动,那也会生成一个运行状况监视生存期事件,对吗?我只是不明白这些。。。

    不管怎样,抱歉问了这么长时间,希望有人能有点想法。

    当做

    1 回复  |  直到 15 年前
        1
  •  1
  •   Oren Trutner    15 年前

    您是否考虑过将会话状态放置在应用程序之外,例如与asp.net out-of-process modes for session state ?

    默认情况下,会话状态在应用程序中保持。它不能跨多个服务器使用,也不能跨应用程序崩溃(即应用程序中任何未处理的异常)进行维护

    1. 或者,如果您的负载平衡器保证强会话亲和力,则可以使用asp.net状态服务器管理每个服务器中的状态,使状态在应用程序重新启动后仍然有效。