【问题标题】:HTTPModule Only Getting Called Once Per PageHTTPModule 每页只被调用一次
【发布时间】:2010-08-15 21:58:12
【问题描述】:

我正在尝试为 ASP.NET 实现自定义 HTTPModule。我有一个非常简单的 html 页面,其中包含一个图像和一个挂钩到 BeginRequest 事件的 HTTPModule。当我使用 Visual Studio 的开发 Web 服务器进行调试时,我的模块被调用了两次:一次用于初始页面请求,然后一次用于图像请求。这是我所期望的。但是,当我将应用程序部署到 IIS 时,该模块只为页面请求调用一次。我不明白为什么。有任何想法吗?谢谢。

【问题讨论】:

  • 如果以下任何一个答案是正确的,请您将其标记为已回答吗?

标签: asp.net iis httpmodule


【解决方案1】:

我猜您正在使用带有经典托管管道模式的 IIS6 或 IIS7。在这种情况下,您的 ASP.NET 应用程序只接收mapped to isapi.dll 的请求。通常,这些请求包括具有以下扩展名的请求:aspxashxasmx、...查看here 了解更多信息。

其他扩展的请求由 IIS 直接处理,因此它们永远不会到达您的 HTTP 模块(作为 ISAPI 扩展的一部分运行)。

在 IIS7 和更高版本中,Microsoft 已将管道集成到 IIS 中。这意味着所有请求都通过整个 ASP.NET 管道。

另一种可能性是您的图像缓存在某处,正如 Jon 所建议的那样。

【讨论】:

  • @skazzaks:进一步澄清这一点:您的开发机器运行 Cassini 或 IIS7 集成模式,而您的生产服务器运行 IIS6 或 IIS7 经典模式。
【解决方案2】:

首先要检查的是:服务器是否真的被联系到了图像?是否在客户端缓存中?

要检查的第二件事:它是否被缓存在服务器端?

尝试直接在浏览器中加载图像本身的 URL...并可能在末尾添加类似 ?foo=bar 的内容以执行一些原始的缓存清除操作。

【讨论】:

  • 是的,已联系服务器。我刷新页面,打开 Fiddler 并查看请求是否通过。我直接点击了图像,它仍然没有调用自定义模块。我尝试了 ?foo=bar 并且没有骰子 - 我什至重置了 IIS。
  • 正如 Jon 已经推荐的那样,在调用网络服务器之前尝试清除缓存。
猜你喜欢
  • 1970-01-01
  • 2021-01-04
  • 2019-08-23
  • 2017-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多