Asp.net 静态文件的HTTPModule有时无法在IIS 6上运行

Asp.net 静态文件的HTTPModule有时无法在IIS 6上运行,asp.net,iis,iis-6,httpmodule,isapi,Asp.net,Iis,Iis 6,Httpmodule,Isapi,我有一个HTTP模块,它根据CSS、JS和HTML文件的内容类型头来清理、压缩和缩小这些文件。它在我的登台环境和本地主机(ISS7,经典管道模式)中工作得非常好。在IIS 6(生产)上,它不可靠。偶尔,asp.net会停止处理这些静态文件,并且似乎会还原为默认的IIS处理程序。如果我触摸web.config或执行IISRESET,它将再次正常工作一段时间。即使当模块进入这种“古怪状态”..aspx文件仍按预期在模块中运行。因此,我相当肯定模块不是问题所在,我们正在研究的是IIS问题 我在IIS

我有一个HTTP模块,它根据CSS、JS和HTML文件的内容类型头来清理、压缩和缩小这些文件。它在我的登台环境和本地主机(ISS7,经典管道模式)中工作得非常好。在IIS 6(生产)上,它不可靠。偶尔,asp.net会停止处理这些静态文件,并且似乎会还原为默认的IIS处理程序。如果我触摸web.config或执行IISRESET,它将再次正常工作一段时间。即使当模块进入这种“古怪状态”..aspx文件仍按预期在模块中运行。因此,我相当肯定模块不是问题所在,我们正在研究的是IIS问题

  • 我在IIS 6中映射了HTML、JS和CSS文件,由aspnet_isapi.dll处理所有谓词
  • 在我的web.config中,我已经在handlers部分中为所有谓词设置了这些静态文件由System.web.StaticFileHandler处理
  • HTTP模块也连接到web.config中

  • 有什么想法吗?我想暂时避免将我的生产web服务器升级到IIS 7

    开发和生产之间的一大区别是交通量

    Volume可以突出显示低流量开发测试中未遇到的并发问题


    您确定您的代码没有线程问题等。

    开发和生产之间的一大区别是通信量

    Volume可以突出显示低流量开发测试中未遇到的并发问题


    您是否确定您的代码没有线程问题等。

    我非常有信心地说,问题在于您的HttpModule。可能是线程问题。HttpModule对于所有请求只实例化一次,因此如果将数据存储在类的成员变量中,则会出现问题,因为多个线程将同时访问相同的数据


    顺便说一句,我想我会为你的问题提出另一种解决办法。使用MSBuild等创建一个构建脚本,并让构建脚本压缩文件。

    我可以非常肯定地说,问题在于您的HttpModule。可能是线程问题。HttpModule对于所有请求只实例化一次,因此如果将数据存储在类的成员变量中,则会出现问题,因为多个线程将同时访问相同的数据


    顺便说一句,我想我会为你的问题提出另一种解决办法。使用例如MSBuild创建生成脚本,并让生成脚本压缩文件。

    我希望我有一个卷问题!不幸的是,我的流量非常稀少。我一定会调查的。我希望我有一个音量问题!不幸的是,我的流量非常稀少。不过,我肯定会对此进行调查。我曾考虑将此作为构建过程的一部分,但该模块也在处理运行时生成的axd和asmx脚本代理。这些非静态示例的有趣之处在于,它们一直运行良好。只有静态文件偶尔无法被模块处理。我有两个成员变量可以更改为常量(它们是在模块的构造函数中填充的StringCollections)。我对多线程应用没有太多的经验,这些可能是可疑的吗?@smercer-如果模块中唯一的变量是构造函数中填充的两个变量,那么这些不应该受到指责。但同时向其中一个静态文件发出大量请求可能有助于表明这是否是多线程问题。但多线程问题中最糟糕的部分是,您永远无法确保您没有多线程,因为您无法重新创建。fI曾考虑将此作为构建过程的一部分,但该模块还处理运行时生成的axd和asmx脚本代理。这些非静态示例的有趣之处在于,它们一直运行良好。只有静态文件偶尔无法被模块处理。我有两个成员变量可以更改为常量(它们是在模块的构造函数中填充的StringCollections)。我对多线程应用没有太多的经验,这些可能是可疑的吗?@smercer-如果模块中唯一的变量是构造函数中填充的两个变量,那么这些不应该受到指责。但同时向其中一个静态文件发出大量请求可能有助于表明这是否是多线程问题。但是多线程问题中最糟糕的部分是,你永远不能仅仅因为不能重新创建而确定你没有多线程