了解IIS7.5上的处理程序映射

时间:2011-08-11 16:23:33

标签: .net asp.net iis-7.5

我试图弄清楚IIS7.5中Handler Mapping的含义以及IIS如何使用这些信息来决定谁执行什么。

例如,我看到几个带有* .aspx路径的条目。哪一个获胜?可能是某些条目仅在启用Classic Pipeline时适用,而其他一些条目仅在使用Integrated管道时适用?并且位数(32位,64位)会影响哪些条目?

如果有人可以解释(或有链接解释)当一般的HTTP请求到来时,IIS7.5会做什么(就“调度”/“路由”/“你!处理那个!”而言):

    GET /blabla/dummy.bla HTTP/1.1
    Host: blabla.org

稍后我会对IIS Rewrite Module或ARR如何工作感兴趣,但是现在我只对Handle Mapping配置感兴趣。

提前感谢!

3 个答案:

答案 0 :(得分:10)

Fallow's answer不太准确,处理程序映射IIS7的处理方式与IIS6脚本映射不同。

在IIS7的管理控制台中,UI中没有显示重要属性preCondition属性。

preCondition属性用于指定何时应调用处理程序。回答你的问题:

  

例如,我看到几个带有* .aspx路径的条目。哪一个   赢了?可能是某些条目仅适用于Classic Pipeline   使用集成管道时是否启用了其他一些?而且   比特率(32比特,64比特)会影响哪些条目?

使用不同的前置条件来决定应该调用哪个.aspx处理程序。例如,在安装了ASP.NET 2.0和ASP.NET 4.0的64位系统上,定义了六个可能的.aspx处理程序映射。每个人都有不同的preCondition规则:

<add name="PageHandlerFactory-ISAPI-4.0_32bit" 
     path="*.aspx" 
     modules="IsapiModule" 
     scriptProcessor="C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" 
     preCondition="classicMode,runtimeVersionv4.0,bitness32" />

<add name="PageHandlerFactory-ISAPI-4.0_64bit" 
     path="*.aspx"
     modules="IsapiModule" 
     scriptProcessor="C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" 
     preCondition="classicMode,runtimeVersionv4.0,bitness64" />

<add name="PageHandlerFactory-Integrated-4.0" 
     path="*.aspx" 
     type="System.Web.UI.PageHandlerFactory" 
     preCondition="integratedMode,runtimeVersionv4.0" />

<add name="PageHandlerFactory-Integrated" 
     path="*.aspx" 
     type="System.Web.UI.PageHandlerFactory" 
     preCondition="integratedMode" />

<add name="PageHandlerFactory-ISAPI-2.0" 
     path="*.aspx"
     modules="IsapiModule" 
     scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" 
     preCondition="classicMode,runtimeVersionv2.0,bitness32" />

<add name="PageHandlerFactory-ISAPI-2.0-64" 
     path="*.aspx" 
     modules="IsapiModule" 
     scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" 
     preCondition="classicMode,runtimeVersionv2.0,bitness64" />

如果您查看上面的每个preConditions,它们都会略有不同,这就是IIS选择执行哪个处理程序映射的方式。

有关详细信息,请参阅:

  

http://www.iis.net/ConfigReference/system.webServer/handlers/add

还有一篇很棒的文章解释了处理程序映射及其preConditions

  

Achtung! IIS7 Preconditions

答案 1 :(得分:0)

以下帖子适用于IIS 6.0,但我没有发现IIS 7.X中的行为不同的证据。

  

IIS检查ScriptMaps中是否存在任何通配符应用程序映射,如果是,则从ScriptMaps属性调用ORDER中的第一个通配符应用程序映射。

     

只有当通配符应用程序映射返回并告诉IIS“我不处理此请求”时,IIS才会调用下一个通配符应用程序映射...直到IIS通过所有通配符应用程序映射或某些通配符应用程序映射声明“我是处理此请求“。”

该帖子的链接是:  http://blogs.msdn.com/b/david.wang/archive/2005/10/14/howto-iis-6-request-processing-basics-part-1.aspx

答案 2 :(得分:0)

以上解决方案对我不起作用,我尝试了以下步骤并且它有效: 在IIS管理器中打开ISAPI筛选器模块,并从列表中删除aspnet_isapi.dll。 aspnet_isapi.dll是ISAPI扩展,而不是ISAPI过滤器。

有关详细信息,请参阅: http://forums.iis.net/t/1107699.aspx?HTTP+error+500+0+error+code+0x800700b7