【问题标题】:Losing my session variables - What exception might cause sessions to be lost?丢失我的会话变量 - 什么异常可能导致会话丢失?
【发布时间】:2012-10-23 17:38:55
【问题描述】:

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

(我试图将会话状态之外的内容附加到实体框架数据上下文并得到“值不能为空,参数名称实体”错误)。所以不知何故,会话变量现在包含 null 而不是对象。

有趣的是,我们在两台不同的服务器上部署了相同的应用程序——一台用于外部用户的 DMZ 服务器和一台用于内部用户的内部服务器。两个不同服务器上的这两个应用程序似乎都有相同的问题。

健康监控也在监控生命周期事件,我可以从中看出我们没有发生 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

我可以确认这不是 Response.Redirect 问题,因为这没有发生 - 这是一个在线申请表 - 它在 page_load 上将一个对象置于会话状态,并且有一个多视图 - 当按下“下一个”时,对象来了脱离会话状态,附加到数据上下文,从 Web 表单进行更改并更新数据上下文。所以没有 response.redirect 发生。

我还可以从该链接确认“更新 1”和“更新 2”中的详细信息与我无关 - 应用程序池中仅运行 1 个工作进程,并且服务器名称或网址不包含下划线.

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

所以:-
- 不是超时
- 不是 IIS 工作进程回收或任何其他会生成健康监控生命周期事件的事情
- 不使用 response.redirect
- 没有网络场/多个工作进程

然后我找到了这个帖子:http://bytes.com/topic/asp-net/answers/490975-disappearing-sessions MVP 说了以下内容:

任何时候 IIS 应用程序 重新启动,所有会话都重新启动 也。所以是的,这通常会 在重新编译期间发生和一些 主要未处理的应用程序级别 例外。

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

本贴也涉及到:http://bytes.com/topic/asp-net/answers/490975-disappearing-sessions

我见过的唯一相似之处是 当运行时错误发生在 ASP.NET 应用程序,导致 应用程序重新启动。你是 接收 Application_OnStart 事件 也是?

所以我猜如果我有一个运行时错误导致应用程序重新启动,那也会生成一个健康监控生命周期事件,对吧?而我只是没有得到任何这些......

如果我真的可以复制它会容易得多,但我就是不能!

抱歉,问了一个冗长的问题,只是希望有人有一些想法。

问候

【问题讨论】:

    标签: asp.net asp.net-4.0


    【解决方案1】:

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

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

    1. 使用 SQL Server 模式使相同的会话状态在多个服务器上可用。

    2. 或者,如果您的负载均衡器保证强大的会话亲和性,您可以使用 asp.net 状态服务器来管理每个服务器中的状态,以使状态在应用程序重新启动后仍然存在。

    【讨论】:

    • 嗨。感谢您的评论,我们在今天早上的更新中将会话状态移出了进程(到 ASP.net 状态服务器),但不幸的是它没有解决问题。我们仍然有会话变量丢失。
    • 与系统管理员在 IIS 中进行的其他调整一起,这已经奏效了。很抱歉接受缓慢,但感谢您的帮助。
    • @bgs264:你能和我们分享一下那些“其他调整”是什么吗?
    猜你喜欢
    • 1970-01-01
    • 2014-08-23
    • 2012-01-10
    • 2011-04-15
    • 1970-01-01
    • 2011-12-05
    • 2011-03-09
    • 2012-10-18
    相关资源
    最近更新 更多