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