您的位置:首页 > 理论基础 > 计算机网络

002. Asp.Net Routing与MVC 之(基础知识):HttpModule 与 HttpHandler

2014-07-30 15:45 375 查看
本文By 杨工.

一、 Http.sys http.sys 从Win2003和WinXP SP2开始,就成为windows操作系统内核驱动程序,能够让任何应用程序通过它提供的接口,以http协议进行信息通讯。 如果用户不慎删除了该驱动文件,该驱动会在下次系统启动时重建。是一个删除不掉的系统核心组件,手动结束该驱动,该驱动也会马上重新创建(只有粉碎文件才不能马上重建,但粉碎后,下次启动会重建)。 新的Http.sys带来的好处大致有如下一些: 1. 缓存 - 静态的内容现在被缓存于内核模式下,这使服务响应速度更快 2. 记录 (Log)-IIS的log功能更快且标准化了 3. 带宽控制 -更大的可伸缩性的控制和调节 4. 可靠性 - 所有的服务请求会在Http.sys里暂存入队列,而不是由服务程序本身来处理,这样,即使WEB服务程序重启,尚未被处理的请求也不会丢失了 5. IP端口重用 -只要是通过Http.sys管理的端口(基本包括了那些著名的端口,比如80),都可以同时允许多个程序同时监听了。 Http.sys 是IIS 6.0使用的新型侦听器。在IIS 6.0出现之前,inetinfo.exe完成侦听HTTP请求的功能,同时还要将请求转发给对应的处理程序。从IIS 6.0开始,侦听器与inetinfo.exe分离开来,inetinfo.exe在用户模式下运行,Http.sys则完成侦听HTTP请求的功能,在 内核模式下运行。 二、 IIS的生命周期 1、HttpApplication 对象分配给请求

2、集成处理管道

三、HttpModule 1、HttpModule是实现了System.Web.IhttpModule接口的类。 IHttpModule接口的声明: public interface IHttpModule { void Init (HttpApplication context); void Dispose (); } Init 方法:系统初始化的时候自动调用,这个方法允许HTTP模块向HttpApplication 对象中的事件注册自己的事件处理程序。 Dispose方法: 这个方法给予HTTP模块在对象被垃圾收集之前执行清理的机会。此方法一般无需编写代码。 2、事件 HTTP模块可以向System.Web.HttpApplication对象注册下面一系列事件: AcquireRequestState 当ASP.NET运行时准备好接收当前HTTP请求的对话状态的时候引发这个事件。 AuthenticateRequest 当ASP.NET 运行时准备验证用户身份的时候引发这个事件。 AuthorizeRequest 当ASP.NET运行时准备授权用户访问资源的时候引发这个事件。 BeginRequest 当ASP.NET运行时接收到新的HTTP请求的时候引发这个事件。 Disposed 当ASP.NET完成HTTP请求的处理过程时引发这个事件。 EndRequest 把响应内容发送到客户端之前引发这个事件。 Error 在处理HTTP请求的过程中出现未处理异常的时候引发这个事件。 PostRequestHandlerExecute 在HTTP处理程序结束执行的时候引发这个事件。 PreRequestHandlerExecute 在ASP.NET开始执行HTTP请求的处理程序之前引发这个事件。在这个事件之后,ASP.NET 把该请求转发给适当的HTTP处理程序。 PreSendRequestContent 在ASP.NET把响应内容发送到客户端之前引发这个事件。这个事件允许我们在内容到达客户端之前改变响应内容。我们可以使用这个事件给页面输出添加用于所有页面的内容。例如通用菜单、头信息或脚信息。 PreSendRequestHeaders 在ASP.NET把HTTP响应头信息发送给客户端之前引发这个事件。在头信息到达客户端之前,这个事件允许我们改变它的内容。我们可以使用这个事件在头信息中添加cookie和自定义数据。 ReleaseRequestState 当ASP.NET结束所搜有的请求处理程序执行的时候引发这个事件。 ResolveRequestCache 我们引发这个事 件来决定是否可以使用从输出缓冲返回的内容来结束请求。这依赖于Web应用程序的输出缓冲时怎样设置的。 UpdateRequestCache 当ASP.NET完成了当前的HTTP请求的处理,并且输出内容已经准备好添加给输出缓冲的时候,引发这个事件。这依赖于Web应用程序的输出缓冲是如何设置的。 四、 HttpHandler HttpHandler是HTTP请求的处理中心,真正地对客户端请求的服务器页面做出编译和执行,并将处理过后的信息附加在HTTP请求信息流中再次返回到HttpModule中。 HttpHandler与HttpModule不同,一旦定义了自己的HttpHandler类,那么它对系统的HttpHandler的关系将是“覆盖”关系。 在http请求的处理过程中,只能调用一个HttpHandler,但可以调用多个HttpModule。 参见: http://msdn.microsoft.com/zh-cn/library/ms178472%28v=vs.100%29.aspx

另外,网上还有很多写的好的文章,两个传送门:

《HttpModule与HttpHandler详解》
/article/5271716.html

《HttpHandler HttpModule入门篇》 (针对ASP.NET 2.0 内容依然适用)
/article/5872501.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: