【问题标题】:Application_EndRequest(object sender, EventArgs e) being called multiple times in asp.netApplication_EndRequest(object sender, EventArgs e) 在 asp.net 中被多次调用
【发布时间】:2011-04-15 16:40:54
【问题描述】:

在我的应用程序中,我定义了一个实现 ihttpmodule 的类,它包含以下方法

  public void Init(HttpApplication application)
    {
        application.EndRequest += new EventHandler(Application_EndRequest);
    }


 private void Application_EndRequest(object sender, EventArgs e)
    {
        HttpApplication application = (HttpApplication)sender;
        HttpContext context = application.Context;


        IObjectContainer objectClient = context.Items[KEY_DB4O_CLIENT] as IObjectContainer;

        if (objectClient != null)
        {
            objectClient.Close();
        }

        objectClient = null;
        context.Items[KEY_DB4O_CLIENT] = null;
    }

当我尝试运行应用程序并对其进行调试时,我注意到一件奇怪的事情:

在 chrome private void Application_EndRequest(object sender, EventArgs e) 中,应用程序启动时执行了 3 次,应用程序结束时又执行了 3 次。

在 Internet Explorer 中 private void Application_EndRequest(object sender, EventArgs e) 在应用程序启动时执行 2 次,在应用程序结束时再次执行 2 次。

为什么 Application_EndRequest 会被执行多次。它不应该只运行一次吗?

我也想知道 Visual Studio Development Web Server 和 IIS 之间的区别?

我俩有什么区别。

请帮帮我

感谢期待

【问题讨论】:

  • 我也看到了同样的情况,你知道为什么吗?我正在使用curl 访问该网站,所以我怀疑还有其他事情发生。

标签: asp.net web-applications


【解决方案1】:

Application_EndRequest() 将被调用的次数与运行时处理的请求一样多。使用 VSDev 服务器,这将是每个请求;包括用于图像的资源,以及浏览器可能会寻找的其他各种资源……例如书签图标图像。

这也可以解释浏览器之间的差异; IE 和 Chrome 可能在他们尝试请求的额外内容方面存在差异,尤其是:站点图标。

【讨论】:

  • @Andrew 在应用程序中添加 Application_EndRequest 和 Init 方法是否会产生开销,因为它们必须在每次请求之前多次执行?是否有一种明确的方法可以在应用程序启动和结束时只调用一次?
  • 你的意思是Application_StartApplication_End,也许吧?
  • @Andrew 好像他们在不需要被执行时被执行了?为什么他们会这样被处决?
  • 不,它们被准确地调用在它们应该是......在每个Request的末尾......这就是它被称为“EndRequest”的原因。你想要的是Application_End...而不是Application_EndRequest
  • @Andrew 我会尝试回到你身边。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-28
  • 2016-02-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多