Asp.net 为什么iis7中仍然存在aspnet_isapi.dll?

Asp.net 为什么iis7中仍然存在aspnet_isapi.dll?,asp.net,iis-7,Asp.net,Iis 7,据我所知,asp.net已与IIS集成 也就是说,无论传入的请求是什么,asp.net运行时始终托管在IIS7中。 例如,.aspx请求或其他静态文件请求,如.html或.jpg 我们知道,在IIS6中,aspnet\u isapi.dll将被加载以创建asp.net运行时,并且仅当.aspx,.ashx等请求到达时才运行asp.net 既然asp.net已在“集成模式”下与IIS7集成,aspnet\u isapi.dll的用途是什么?这就是为什么我们在iis7中仍然可以看到aspnet_is

据我所知,asp.net已与IIS集成

也就是说,无论传入的请求是什么,asp.net运行时始终托管在IIS7中。 例如,
.aspx
请求或其他静态文件请求,如
.html
.jpg

我们知道,在IIS6中,
aspnet\u isapi.dll
将被加载以创建asp.net运行时,并且仅当
.aspx
.ashx
等请求到达时才运行asp.net


既然asp.net已在“集成模式”下与IIS7集成,
aspnet\u isapi.dll
的用途是什么?这就是为什么我们在iis7中仍然可以看到aspnet_isapi.dll的原因吗?

简而言之,它只适用于经典模式

在经典管道模式下,ASP.NET作为ISAPI扩展插入IIS请求处理管道-与IIS 6中的方式完全相同。事实上,如果打开%WINDIR%\system32\inetsrv\config\applicationHost.config文件并找到其中的部分,您可以看到IIS是如何配置为将ASP.NET特定请求映射到aspnet\u isapi.dll的:

<handlers accessPolicy="Read, Script">
  ...
  <add name="PageHandlerFactory-ISAPI-2.0" 
       path="*.aspx" verb="GET,HEAD,POST,DEBUG" 
       modules="IsapiModule" 
       scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" 
       preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
  ...
</handlers>

...
...
请注意处理程序映射的前提条件属性。除此之外,此属性设置为classicMode,这确保此处理程序映射仅在应用程序池配置为以经典模式运行时生效