繁体   English   中英

以编程方式诊断由于应用程序回收导致的​​ASP.Net会话丢失?

[英]Programmatically diagnosing ASP.Net session loss due to application recycling?

我们有一个ASP.Net 2.0(VS2005)应用程序,该应用程序在本地可以正常运行,但是当部署在远程服务器上时,有时会丢失会话状态。

我怀疑IIS重新编写应用程序时可能会出现问题,从而使用户的会话状态中断。 但是,服务器是不受我们控制的远程服务器,因此我们不能简单地启动IIS Admin并签出应用程序设置。 当然,另一个可能的原因是客户端出于某种原因拒绝ASP.Net会话cookie。

(我们已经在代码中排除了错误,因为它是一个简单的应用程序,它从不尝试从Session对象中删除任何内容,但是当然……这些都是著名的遗言,是吗?)

您将如何通过编程方式对此进行诊断?

我主要是想找出如何诊断问题的方法; 如果过度的应用程序回收是罪魁祸首,那么编写代码就不难了。

我确信这是ASP.Net开发人员的常见问题。

如果可以更改某些设置,以下几个链接可能有助于解决此问题:

在IIS 6.0(IIS 6.0)中记录工作进程回收事件

记录ASP.NET应用程序关闭事件

将一些日志记录代码添加到global.asax Application_Start方法中,您将能够看到丢失/何时由应用程序重启引起(或者,至少知道服务器何时启动,如果您知道会话正在运行)同时迷路了,你知道你的罪魁祸首)。

一种解决方法是使用proc会话状态之外的状态(如果您无法控制服务器,则可能必须基于SQL)。 因为您存储在Session中的所有内容都必须可序列化,所以代码需要花费一些额外的工作,但是解决了应用重新启动导致会话丢失的问题。

我发现会话丢失的情况-在asp.net页中,金额文本框字段包含无效字符,然后再进行会话变量检索以用于其他目的。通过Convert.ToInt32或double发布无效数字后,引发第一次机会异常,但错误没有显示在那一行,相反,由于未处理的异常,Session为空,因此在会话检索时显示错误,从而欺骗了调试...

提示:测试您的系统使其失败-破坏性..在不相关的情况下输入足够的垃圾,您也可以在本地代码库上重现此机器... :)

希望对您有帮助,hydtechie

为应用程序池中的多个工作线程(Web花园)配置的IIS可能会导致会话状态丢失。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM