ASP.NET MVC 5.0——ASP.NET管道原理

1.IIS与ASP.NET

IIS 与ASP.NET 是两个相互独立的管道,在各自管辖的范围内,具有自己的一套机制对HTTP请求进行处理。两个管道通过 ISAPI 实现联通,IIS是第一道屏障,当对HTTP请求进行必要的前期处理之后,IIS通过ISAPI将请求分发给ASP.NET管道,ASP.NET完成对HTTP请求的处理之后,再将处理之后的结果返回给IIS。IIS进行后期处理,最后生成HTTP回复对请求予以相应。

2.ASP.NET 管道

当接受到的HTTP请求是对web应用的第一次访问,IIS会通过AppDomainFactory为该web应用创建一个应用程序域,然后通过asp_isapi加载运行时:IsapiRuntime.这时被加载的IsapiRuntime会接管该HTTP请求。

ASP.NET MVC 5.0——ASP.NET管道原理_第1张图片

3.HttpApplication

ASP.NET 采用对象池的机制来创建和获取HttpApplication对象。当第一个请求抵达时,ASP.NET会创建多个HttpApplication对象,并将其至于池中,然后选择一个对象来处理该请求。处理完成之后HttpApplicatin对象不会被回收,而是被释放到池中。对于后续的请求,空闲的对象从池中被取出,如果池中所有的对象都处于繁忙的状态,在没有超出HttpApplication池的最大容量的时候,ASP.NET会创建新的HttpApplication对象,否则将请求放入等待队列等待现有HttpApplication对象的释放。
HttpApplication在整理请求的不同阶段会触发相应的事件,可以通过注册相应的事件,将处理逻辑注入到HttpApplication处理请求的某个阶段。
HttpApplication派生于Global.ASAX文件,我们可以通过创建该文件对HttpApplication的请求处理行为进行定制。

4.HttpModule

HttpModule成就了ASP.NET的扩展性。

当请求转入管道,最终负责处理该请求的是:HttpHandler。但在这之前,ASP.NET会先加载并初始化所有配置的HttpModule对象。在HttpApplication请求处理生命周期中的某一个阶段,相应的事件会被触发,通过HttpModule注册的事件处理程序也会得以执行。
除了系统定义的HttpModule之外,我们还可以自定义HttpModule,通过web.config可以很容易将其注册到web应用中。

5.HttpHandler

对于不同的资源类型的请求,ASP.net会加载不同的HttpHandler来处理。所有的HttpHandler都实现接口System.Web.IHttpHandler.定义在其中的方法ProcessRequest提供了处理请求的实现。
HttpHandler和HttpHandlerFactory的类型都可以通过配置的方式配置到web.config中。除了通过配置建立起HttpHandler类型与请求路径模式之间的映射关系,也可以调用HttpContext中定义的一个方法RemapHandler方法将一个HttpHandler对象映射到当前的Http请求。(当想要采用后者,必须让ASP.NET直接跳过默认的HttpHandler映射操作,由于这个默认的HttpHandler映射发生在HttpApplication的PostMapRequestHandler事件触发之前,所有只有在这之前调用RemapHandler方法才有用

你可能感兴趣的:(ASP.NET,MVC)