以编程方式诊断由于应用程序回收而导致的ASP.Net会话丢失?
-
03-07-2019 - |
题
我们有一个ASP.Net 2.0(VS2005)应用程序在本地工作正常,但有时在远程服务器上部署时会丢失会话状态。
我怀疑IIS重新编写应用程序可能会出现问题,从而消除了用户的会话状态。但是,服务器远程不受我们的控制...所以我们不能简单地启动IIS Admin并检查应用程序设置。当然,另一个可能的原因是客户因某些原因拒绝ASP.Net会话cookie。
(我们几乎排除了代码中的错误,因为它是一个简单的应用程序,它永远不会尝试从Session对象中删除任何东西,但当然......这些都是着名的遗言,是吗?)
你会如何以编程方式诊断?
我主要是想弄清楚如何诊断问题;如果过度热心的应用程序回收是罪魁祸首,那么编写代码应该不会太难。
我确信这是ASP.Net开发人员的常见问题。
解决方案
其他提示
将一些日志记录代码添加到global.asax Application_Start方法中,您将能够看到何时/如果您的丢失是由应用程序重新启动引起的(或者至少,您会看到服务器何时启动,如果您知道会议在同一时间丢失,你知道你的罪魁祸首。)
解决方法是使用proc会话状态(如果您没有服务器控件,可能必须是基于SQL的)。您的代码需要一些额外的工作,因为您在Session中存储的所有内容都必须是可序列化的,但解决了应用程序重新启动导致会话丢失的问题。
在应用程序池中为多个工作线程(Web Garden)配置的IIS可能会导致会话状态丢失。
我找到了会话丢失的场景 - 在asp.net页面中,对于金额文本框字段具有无效字符,然后是用于其他目的的会话变量检索。在通过转换发布无效数字解析之后。 ToInt32或double引发了第一次机会异常,但错误没有显示在该行,而不是因为未处理的异常,Session为空,在会话检索时显示错误,因此欺骗了调试......
提示:测试你的系统是否失败 - 破坏..在不相关的场景中输入足够的垃圾,你也可以在你的本地代码库中重现这台机器......:)
希望它有帮助, hydtechie