Httphandler,HttpModule学习笔记

1.Asp.Net页面请求流程(IIS5.X)

gif_1

inetinfo.exe:监听Request并把Request分发到Work Process。
Http PipeLine:将Http请求发送给ASPNET_WP.EXE进程的管道。采用这个管道来通信是由于IIS在IntelInfo进程,和ASPNET_WP.EXE进程间的通信是同一台机器不用进程的通信。(ASPNET_WP.EXE进程是由ISAPI创建的。)
ASPNET_WP.EXE(Work Process):一台机器只有一个该进程,每一个基于虚拟目录的ASP.NET Application(网站)对应一个Application Domain,也就是说所有的Application都是运行在同一个Work Process上的。Application之间的隔离是通过Domain而不是通过Work Process进程。

gif_1

HttpContext:体现当前Request的上下文信息,它的生命周期知道整个Request处理结束或者处理超时。通过HttpContext对象我们可以访问属于当前Request的一系列常用的对象:Server,Session,Cache,Application,Request,Response,Trace,User,Profile等等。此外我们可以认为将一些数据放在Items属性中作为状态管理的一种方式,不过这种状态管理和其他一些常用的方式,比如Session,Cache,Application,Cookie等,具有根本性的不同之处是其生命周期仅仅维持在当前Request的Context中。
HttpApplication:ASP.NET Application的体现,和global.asax对应,通过HttpApplicationFactory.GetApplicationInstance创建一个基于Gloabal.asax的HttpApplication对象。在创建这个对象之前,会调用InitInternal方法,该方法中有一个InitModules(),会创建config文件中注册的Modules,并且把这些Modules加载到HttpApplication的_moduleCollection Filed中。

2.HttpModule

HttpApplication本身并不提供对Request的处理功能,通过HttpModule封装一些功能模块,并将其注册到HttpApplication中来实现这些功能。

3.HttpHandler

定义了各种Type的请求的处理程序,比如下面这一段:
<add verb="*" path="*.aspx" type="System.Web.UI.PageHandlerFactory" />
PageHandlerFactory是aspx文件的默认处理程序
<add verb="*" path="*.config" type="System.Web.HttpForbiddenHandler" />
HttpForbiddenHandler是config文件的默认处理程序,HttpForbiddenHandler实现了当尝试访问映射到此处理程序的资源时,它会发出 HTTP 403 错误“禁止”。

参考:http://www.cnblogs.com/artech/archive/2007/09/13/891266.html

原文地址:https://www.cnblogs.com/celery94/p/1365295.html