假设配置了多个处理程序映射来处理请求,在 IIS 中,确定使用哪一个来提供响应的算法是什么?
答案1
我假设您询问的是 IIS7 处理程序映射。
在 IIS 管理器中,每个处理程序映射都有一个隐藏的preCondition
属性。例如,下面是页面可以拥有的applicationHost.config
所有不同页面处理程序的摘录.aspx
(我删除了一些属性以保持简洁):
<add name="PageHandlerFactory-ISAPI-4.0_32bit" path="*.aspx"
preCondition="classicMode,runtimeVersionv4.0,bitness32" />
<add name="PageHandlerFactory-ISAPI-4.0_64bit" path="*.aspx"
preCondition="classicMode,runtimeVersionv4.0,bitness64" />
<add name="PageHandlerFactory-Integrated-4.0" path="*.aspx"
preCondition="integratedMode,runtimeVersionv4.0" />
<add name="PageHandlerFactory-Integrated" path="*.aspx"
preCondition="integratedMode" />
<add name="PageHandlerFactory-ISAPI-2.0" path="*.aspx"
preCondition="classicMode,runtimeVersionv2.0,bitness32" />
<add name="PageHandlerFactory-ISAPI-2.0-64" path="*.aspx"
preCondition="classicMode,runtimeVersionv2.0,bitness64" />
当.aspx
请求通过 IIS 管道时,仅preCondition
使用与之匹配的处理程序。
通常preConditions
映射到站点或应用程序运行的应用程序池的配置。
因此,如果我在应用程序池中运行一个站点,配置如下:
.NET Framework 版本 [managedRuntimeVersion] = v2.0 启用 32 位应用程序 [enable32BitAppOnWin64] = True 托管管道模式 [managedPipelineMode] = Classic
如果Default.aspx
需要,则选择处理该请求的处理程序将是:
PageHandlerFactory-ISAPI-2.0
这里有一篇很棒的文章,解释preConditions
得更详细:
我忘了说,处理程序映射的顺序也是一个考虑因素,特别是对于通配符和无扩展名映射。可以通过在 IIS 管理器中打开站点的处理程序映射功能,然后单击右侧操作窗格中的查看有序列表链接来查看/更改这些顺序。在此视图中,您可以更改处理程序的处理顺序。