【发布时间】:2012-10-23 17:38:55
【问题描述】:
我在生产系统 (asp.net webforms .net 4) 上启用了运行状况监控,我看到有很多错误发送给我,表明会话变量已丢失。
(我试图将会话状态之外的内容附加到实体框架数据上下文并得到“值不能为空,参数名称实体”错误)。所以不知何故,会话变量现在包含 null 而不是对象。
有趣的是,我们在两台不同的服务器上部署了相同的应用程序——一台用于外部用户的 DMZ 服务器和一台用于内部用户的内部服务器。两个不同服务器上的这两个应用程序似乎都有相同的问题。
健康监控也在监控生命周期事件,我可以从中看出我们没有发生 IIS 回收、配置更改、bin 文件夹更改、重新编译等。
我可以确认这不是 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