我们有一个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中存储的所有内容都必须是可序列化的,但解决了应用程序重新启动导致会话丢失的问题。

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

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

提示:测试你的系统是否失败 - 破坏..在不相关的场景中输入足够的垃圾,你也可以在你的本地代码库中重现这台机器......:)

希望它有帮助, hydtechie

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top