【问题标题】:Application_End() event is fired without any call in global.ascxApplication_End() 事件在 global.asax 中没有任何调用就被触发
【发布时间】:2011-07-20 09:18:25
【问题描述】:

在我触发更新或删除过程的按钮后,我的应用程序中的 Application_End() 事件在没有任何调用的情况下被我的代码触发。这会导致所有会话被破坏,并在用户每次更新/删除某些内容时将用户重定向到登录页面。 我认为这是由于一些异常终止并重新启动应用程序而没有任何警告或错误。 请建议。 先谢谢了

【问题讨论】:

    标签: asp.net global-asax application-end


    【解决方案1】:

    在调试模式下运行? AppDomain 每 15 次动态重新编译就会被回收。当文件也发生变化时它会回收,例如web.config。当应用程序站点内的非应用程序文件和文件夹发生更改时,它甚至会回收。所以测试一下在发布模式下是否仍然会发生这种情况。

    顺便说一句,您可以更改强制 AppDomain 重置的动态重新编译次数:在 web.config 中设置它:

    <compilation numRecompilesBeforeAppRestart="15" />
    

    提示:调试时不要使用 InProc 会话 - 改用 StateServer 或 SQL State(我的偏好)。

    请参阅this blog post 了解更多信息。

    【讨论】:

      【解决方案2】:

      首先要查看的是事件查看器。在那里你可以找到工作进程中抛出的任何未处理的异常。

      【讨论】:

      • 嗨 onof,我从事件查看器中得到了这个,- - EventData /DevelopmentWebsite E:\Ashu\Source\WebSites\DevelopmentWebsite\ OPTIMUS2-PC 4488 WebDev.WebServer.EXE optimus2-PC\optimus HttpException Session state 在这种情况下不可用。在 System.Web.HttpApplication.get_Session() at ASP.global_asax.Application_End(Object sender, EventArgs e) 在 e:\Ashu\Source\WebSites\DevelopmentWebsite\Global.asax:line 60
      • 也许您的应用需要在经典模式下运行,但在集成模式下运行(请参阅应用程序池),但如果没有详细信息就很难提供帮助
      【解决方案3】:

      您的网站可能出于某种原因正在回收。您将不得不检查代码的作用。我建议检查您的代码中是否没有更改站点结构(创建/删除目录)——这会导致应用程序域回收。

      【讨论】:

        【解决方案4】:

        Application_End 中没有会话状态。就是这么简单。 Application_End 是一个在其他一切都早已消失后触发的事件。事件日志条目很好地描述了这一点。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-10-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多