boruipower 发表于 2013-1-2 23:48:07

从请求管道深入剖析HttpModule的实现机制,有图有真相

<div id="cnblogs_post_body">想要了解底层的原理必须对请求处理过程和页面的生命周期有点了解才方便您入门学习一下内容:
关于请求处理过程和页面的生命周期将会在接下来的日子为大家做一个深入的讲解。
HttpModule的实现机制如下:
1.请求到达ISAPIRuntime 的时候通过ProcessReqeust(下文统称pr ) 方法创建 HttpWrokRequest 对象。
2.在执行ISAPIRuntime 的pr 方法时候,方法内部的HttpRuntime 的pr 方法根据HttpWorkRequest 对象创建了上下文对象 HttpContext 。
3.在HttpRuntime 的 pr 方法内部又通过 HttpApplicationFactory 创建了一个处理应用程序的 HttpApplication 实例。
注意:HttpApplication的创建是根据Global.asax文件编译后的类型,再通过反射的方法创建的实例,由于创建实例的过程非常消耗时间和资源,这个则使用了对象池技术
4.在创建HttpApplication 实例的过程中,内部会调用InitInternal 方法,在这个方法里面 调用了HttpModule 的初始化方法,实现了事件的注册。
注意:在实现事件的注册的过程中,内部会去配置文件里面找是否有配置HttpModule模块,如果有则通过反射注册,没有则继续往下走,直到方法跳出。这个过程就是微软的插件机制的体现。
5.事件注册完之后,HttpApplication实例则开始调用自己的pr 方法开始执行页面的生命周期了。
总结:HttpModule 模块的事件注册,就是在HttpApplication 实例内部调用InitInternal 方法,这个方法里面 调用了HttpModule 的初始化方法,实现了事件的注册。

下面的代码是帮助你理解这个过程:
1、首先定义一个上下文 类    HttpContext

<div class="cnblogs_code"> 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 56 namespace HttpApplicationProcessMethodDemo 7 { 8   /// <summary> 9   /// 上下文10   /// </summary>11   public class HttpContext12   {13   }14 }
页: [1]
查看完整版本: 从请求管道深入剖析HttpModule的实现机制,有图有真相