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

Edu*_*ard 9 .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
Run Code Online (Sandbox Code Playgroud)

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

预先感谢!

Kev*_*Kev 11

Fallow的答案不太准确,处理程序映射IIS7的处理方式与IIS6脚本映射不同.

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

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

例如,我看到几个带有*.aspx路径的条目.哪一个获胜?可能是某些条目仅在启用Classic Pipeline时适用,而其他一些条目仅在使用Integrated管道时适用?并且位数(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" />
Run Code Online (Sandbox Code Playgroud)

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

有关更多信息,请参阅

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

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

ACHTUNG!IIS7前提条件