2

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

我怀疑 IIS 回收应用程序可能存在问题,从而破坏了用户的会话状态。但是,服务器是远程的,不在我们的控制之下……所以我们不能简单地启动 IIS Admin 并检查应用程序设置。当然,另一个可能的原因是客户端出于某种原因拒绝了 ASP.Net 会话 cookie。

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

您将如何以编程方式诊断此问题?

我主要是想弄清楚如何诊断问题;如果过度热心的应用程序回收是罪魁祸首,那么编写代码应该不会太难。

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

4

4 回答 4

3

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

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

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

于 2008-12-30T20:06:07.603 回答
1

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

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

于 2008-12-30T20:04:51.037 回答
0

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

于 2008-12-30T20:18:50.947 回答
0

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

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

希望它有帮助,hydtechie

于 2013-03-22T07:52:20.150 回答