2011-01-26 39 views
0

我有一个HttpModule用于处理错误并在Visual Studio开发环境中运行。它运作良好。对于客户来说,有很难404 s和没有明显的重定向。 Google Analytics应该对此感到满意。HttpModule似乎仅针对静态页面触发

调试中Visual Studio 2008,当一个导航到localhost:

[port]/this_page_doesnt_exist.html, I get a our 404 error page and the hard 404. 

它也可以在开发服务器上

localhost:[port]/this_page_doesnt_exist.aspx. 

当我端口的全是它给我们的IIS7 web服务器,我”它已经完全按照它应该为静态HTML文件工作。但是,我确定我的模块根本没有被调用,因为aspx文件。如果我打开customErrorsOff,我得到标准丑陋的404页面。 (如果customErrorsRemoteOnly,这些都一命呜呼)

的线索似乎在一些IIS设置,我没有正确地调整,以被人指指点点,但我不能为我的生命中找到它。有任何想法吗?

更多信息:

我在集成模式下运行,并且我web.config包含以下几个部分:

<configuration> 
    <system.web> 
     <httpModules> 
     <add name="ErrorModule" type="HttpModules.ErrorModule, HttpModules"/> 
     </httpModules> 
    </system.web> 
    <system.webServer> 
     <validation validateIntegratedModeConfiguration="false"/> 
     <modules> 
     <add name="ErrorModule" preCondition="managedHandler" type="HttpModules.ErrorModule, HttpModules"/> 
     </modules> 
    </system.webServer> 
</configuration> 

然而更多信息

我还以为是发生在IIS7不是发生了什么事。我看到服务器上的HTML文件的404错误消息的唯一原因是CustomErrorHandler本机模块正在获取它。当我关闭该模块时,现在我的ErrorHandler运行aspx文件,但不能用于HTML文件。

我一定要接近,但我一直在努力让我的设置剩下的路。任何人都可以把我推向球门线吗?

回答

1

我打赌你没有在使用集成管道时为IIS 7在web.config上正确注册模块。要使HTTP模块发挥好与IIS,你还需要注册模块中的<system.webServer>部分像这样7:

<configuration> 
    <system.web> 
     <httpModules> 
      <add name="..." type="..." /> 
     </httpModules> 
    </system.web> 

    <system.webServer> 
      <validation validateIntegratedModeConfiguration="false" /> 

      <modules> 
       <add name="..." type="..." preCondition="managedHandler" /> 
      </modules> 
    </system.webServer> 
</configuration> 

我想你有<httpModules>部分,但不是<system.webServer>部分?

在旁边,您使用了什么错误记录模块?如果您使用自己的家庭烘焙的,我可以建议使用ELMAH吗?它很容易入门,开源,并且被广泛使用,所以你可以放心,错误和纠结都被解决了。

快乐编程!

+0

感谢您的建议。除了'precondition =“managedHandler”'之外,我在web.config中拥有了上述所有内容。不幸的是,添加该属性并没有改变行为。 – Brad 2011-01-27 16:02:22

0

经过相当多的努力,我的结论是,答案是: “您的特定Web服务器上现有模块的交互以及web.config和IIS设置如何支持错误处理可能会导致不常见的特定于开发人员的并发症。谢天谢地,如果你想添加一个HttpModule进行错误处理,那么这个问题的变幻莫测就可以通过诸如ELMAH这样的开源工具来解决了。“(我不能担保ELMAH,但是我查看了代码,它似乎需要做很多比我在做什么来得到它的工作更多)

但如果你已经走到这一步,你应该知道我得到了什么工作。

在IIS管理器,我修改模块为了这样,我的错误处理本地CustomErrorModule面前。(或者,respecify在你希望的顺序在网站根web.config所有的模块。)只对托管代码运行模块。

由于某些原因,我的模块不会注意到缺少静态页面的请求,即使它正在运行静态页面。考虑到我未解决的问题(大概ELMAH确实解决了这个问题)。

在IIS管理器中,我将错误页面设置为指向自定义错误页面。这是为静态页面。他们是设置Response.StatusCode的aspx文件。瞧!硬件错误代码的一切。