我在生产系统(asp.net webforms .net 4)上启用了健康监测,并且我看到有很多错误被发送给我,指示会话变量丢失了。
(我试图将会话状态之外的内容附加到实体框架数据上下文中,并获得一个“值不能为null,参数名称实体”的错误)。因此,session变量现在包含null,而不是对象。
有趣的是,我们在两个单独的服务器上部署了相同的应用程序--一个用于外部用户的DMZ服务器,一个用于内部用户的内部服务器。这两个应用程序在两个不同的服务器上似乎都有相同的问题。
健康监测也在监视生命周期事件,从这里我可以看到,我们没有发生IIS回收、配置更改、对bin文件夹的更改、重新编译等情况。
我读过这一页:.aspx
我可以确认这不是Response.Redirect问题,因为这不是发生的--这是一个在线应用程序表单--它将一个对象置于page_load上的会话状态,并且有一个多视图--当按下"next“时,对象从会话状态出来,附加到数据上下文中,从web表单中进行更改,并更新数据文本。所以没有response.redirect发生。
我还可以确认来自该链接的“更新1”和“更新2”中的细节与我无关--在应用程序池中只有一个工作进程在运行,并且服务器名称或web地址不包含下划线。
我还说服了出现会话超时的可能性,但是它们应该由其他代码来处理,这些代码正在运行以检测会话超时(请参阅:http://blogs.msdn.com/b/nikhiln/archive/2007/06/21/detecting-session-timeout-in-asp-net-2-0-web-applications.aspx ),我已经反复测试了这些代码--部分问题是我无法自己复制这个错误。
所以:-
然后,我找到了这个线程: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事件?
因此,我猜想如果我有一个运行时错误,导致应用程序重新启动,这也会产生一个健康监测生命周期事件,对吗?我只是没有得到任何这些..。
如果我真的能复制这个,那就容易多了,但我就是不能!
不管怎么说,很抱歉有一个冗长的问题,只是希望有人有一些想法。
问候
发布于 2010-10-01 16:33:32
您是否考虑将会话状态放置在应用程序之外,例如使用任何asp.net 会话状态的进程外模式
默认情况下,会话状态在应用程序中维护。它不能在多个服务器上使用,也不能在应用程序崩溃时进行维护(即应用程序中任何未处理的异常)。
https://stackoverflow.com/questions/3839894
复制相似问题