西湖鱼 发表于 2015-8-14 01:02:05

Inside IIS And ASP.NET [ 1 ]

  [翻译]
文章来源:http://www.theserverside.net/articles/showarticle.tss?id=IIS_ASP

   IIS与.Net Framework是通过非托管的ISAPI扩展(aspnet_isapi.dll和aspnet_filter.dll)进行通信的。aspnet_isapi_dll扩展用于处理路由请求而aspnet_filter.dll主要处理ASP.NET的无状态会话,这些非托管的组件连同Windows服务状态(aspnet_state.exe)和ASP.NET工作进程(aspnet_wp.exe)组成了ASP.NET处理模型的核心。
    当.Net Framework安装到机器之后(前提安装成功IIS),IIS配置明确的扩展处理请求到aspnet_isapi.dll,有意思的是筛选器也同样被配置到IIS的内部。

对于ASP.NET资源的请求被传递给IIS和ASP.NET扩展配置,该配置是非托管代码和托管代码之前的桥梁。当控件被传递到你的应用程序之前,ASP.NET应用程序对象必须被实例化(在运行时刻)并且考虑决定如何配置设定对请求的处理。Machine.config和Web.Config文件(内部配置元素集合)可以处理全部的请求。

在本文中我们将主要关注<httpHandlers>配置区域,该区域意味着配置.Net处理请求的类型。在默认的Machine.Config文件中可以找到以下代码:

<httpHandlers>
   <add verb=&quot;*&quot; path=&quot;trace.axd&quot; type=&quot;System.Web.Handlers.TraceHandler&quot;/>
   <add verb=&quot;*&quot; path=&quot;*.aspx&quot; type=&quot;System.Web.UI.PageHandlerFactory&quot;/>
   <add verb=&quot;*&quot; path=&quot;*.ashx&quot; type=&quot;System.Web.UI.SimpleHandlerFactory&quot;/>
   <add verb=&quot;*&quot; path=&quot;*.asmx&quot; type=&quot;System.Web.Services.Protocols.WebServiceHandlerFactory,
System.Web.Services, Version=1.0.3300.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a&quot; validate=&quot;false&quot;/>
   <add verb=&quot;*&quot; path=&quot;*.rem&quot;
type=&quot;System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory,
System.Runtime.Remoting, Version=1.0.3300.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089&quot; validate=&quot;false&quot;/>
   <add verb=&quot;*&quot; path=&quot;*.soap&quot;
type=&quot;System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory,
System.Runtime.Remoting, Version=1.0.3300.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089&quot; validate=&quot;false&quot;/>
   <add verb=&quot;*&quot; path=&quot;*.asax&quot; type=&quot;System.Web.HttpForbiddenHandler&quot;/>
   <add verb=&quot;*&quot; path=&quot;*.ascx&quot; type=&quot;System.Web.HttpForbiddenHandler&quot;/>
   <add verb=&quot;*&quot; path=&quot;*.config&quot; type=&quot;System.Web.HttpForbiddenHandler&quot;/>
   <add verb=&quot;*&quot; path=&quot;*.cs&quot; type=&quot;System.Web.HttpForbiddenHandler&quot;/>
   <add verb=&quot;*&quot; path=&quot;*.csproj&quot; type=&quot;System.Web.HttpForbiddenHandler&quot;/>
   <add verb=&quot;*&quot; path=&quot;*.vb&quot; type=&quot;System.Web.HttpForbiddenHandler&quot;/>
   <add verb=&quot;*&quot; path=&quot;*.vbproj&quot; type=&quot;System.Web.HttpForbiddenHandler&quot;/>
   <add verb=&quot;*&quot; path=&quot;*.webinfo&quot; type=&quot;System.Web.HttpForbiddenHandler&quot;/>
   <add verb=&quot;*&quot; path=&quot;*.asp&quot; type=&quot;System.Web.HttpForbiddenHandler&quot;/>
   <add verb=&quot;*&quot; path=&quot;*.licx&quot; type=&quot;System.Web.HttpForbiddenHandler&quot;/>
   <add verb=&quot;*&quot; path=&quot;*.resx&quot; type=&quot;System.Web.HttpForbiddenHandler&quot;/>
   <add verb=&quot;*&quot; path=&quot;*.resources&quot; type=&quot;System.Web.HttpForbiddenHandler&quot;/>
   <add verb=&quot;GET,HEAD&quot; path=&quot;*&quot; type=&quot;System.Web.StaticFileHandler&quot;/>
   <add verb=&quot;*&quot; path=&quot;*&quot; type=&quot;System.Web.HttpMethodNotAllowedHandler&quot;/>
</httpHandlers>

未完代续。
页: [1]
查看完整版本: Inside IIS And ASP.NET [ 1 ]