ASP.NET会话意外结束

时间:2011-06-28 14:51:42

标签: asp.net session visual-studio-2005 web-config session-variables

我对ASP.NET 2.0上的会话有一个非常奇怪的问题。我正在使用的系统使用会话变量来存储对象的参数(如问题和答案),以生成报告。这些是具有相同名称的类的实例,因此它们使用如下参数填充:

此报告是通过4个aspx页面生成的。首先定义位置和日期参数,第二页存储问题,第三个存储答案。最后一个显示Excel和HTML格式的生成报告的链接。 所有可变数据都存储在会话中,一切顺利,直到最后一页,当发生Session.Abandon()之类的事情时,会触发Session_End事件并且所有变量都会丢失。这种情况每天只发生一次,对于每个登录用户首次使用报告,然后你可以尝试整整一天几十次而不会再看到它。

问题发生在同一页面上,会话模式是InProc。

我已经完成了以下验证:

  1. 检查是否有任何Session.Abandon()或Session.Clear()命令。没有。
  2. 检查会话超时,设置为18分钟,如上所述,问题随时发生,无论您在18分钟内使用它的时间有多长。
  3. 在身份验证下检查表单超时。它也设置为18分钟。
  4. 我了解到Server.Transfer()有一个错误,有时会刷新会话和视图状态,并已被Response.Redirec()替换
  5. 逐行监控会话,一切顺利,当页面完全加载时,它就会死掉。所有变量都消失了,但会话仍然有效。
  6. 就我而言,IIS已正确配置。我无法访问它,但所有其他系统都能正常运行。
  7. 还分析了一些上述系统,寻找可能发生的事情的一些线索,但他们的web.config文件与我遇到的问题非常相似,并且没有实现与会话交互的特殊代码不同。
  8. 还考虑过监控IIS以便重新启动应用程序,但我很确定它没有超过默认限制15.但是,我无权访问IIS服务器,并且在我的计算机上进行的所有测试都使用ASP。 NET开发服务器。两者都存在问题。
  9. 已检查进程回收的可能性,例如.config和asax文件更改,对bin目录的更改,没有发生。
  10. 以下限制适用:

    1. 由于公司政策,无法将会话模式更改为InProc以外的其他模式。
    2. 报告生成“过程”是通过4页创建的。我不同意这一点,但由于时间和预算的限制,我无法重做。
    3. 任何想法或解决方案都有帮助。我将保持联系,以便进行必要的更新和测试。

3 个答案:

答案 0 :(得分:2)

我要感谢大家的努力!

我和我的团队发现了这起案件的情况。有一种方法是删除网站文件夹中的临时文件和目录,导致回收和会话刷新。代码是计算日期和时间,并且应该每24小时删除一次目录,因此当用户首次登录系统并生成报告时,它会删除目录并刷新会话。

答案 1 :(得分:1)

一些建议:

  1. 在本地调试第一个匹配,并查看路径中是否有任何唯一内容。
  2. 确保首次点击不会导致工作进程出现问题
  3. 确保在回发之前没有使用会话值
  4. 我认为正在发生的是#3。您正在设置会话中的值,然后在实际存储会话值的回发之前将其从该会话中消耗回来。由于它只是在第一次尝试时发生,这些症状反映了这种怀疑。如果我是正确的,你可以通过从消耗会话值的相同位置消费而不是设置会话来解决这个问题,然后尝试在同一个请求中从中提取。

答案 2 :(得分:0)

我遇到了会话问题。在我的情况下,问题是应用程序池的最大工作线程数。如果您要使用asp.net的默认会话,则必须将其设为1.或者其他线程无法获取会话。