【问题标题】:Programmatically diagnosing ASP.Net session loss due to application recycling?以编程方式诊断由于应用程序回收导致的​​ ASP.Net 会话丢失?
【发布时间】:2013-03-22 15:52:20
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: asp.net asp.net-2.0


    【解决方案1】:

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

    Logging Worker Process Recycling Events in IIS 6.0 (IIS 6.0)

    Logging ASP.NET Application Shutdown Events

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

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

          希望对你有帮助, 技工

          【讨论】:

            猜你喜欢
            • 2011-04-02
            • 1970-01-01
            • 1970-01-01
            • 2012-09-21
            • 1970-01-01
            • 1970-01-01
            • 2012-09-15
            • 2022-08-20
            • 2010-11-05
            相关资源
            最近更新 更多