我说的这些对你来说够底层了吗?
唷-我们已经走完了整个请求处理过程了.这过程中有很多底层的信息,我对HTTP模块和HTTP处理器是怎么工作的并没有描述的非常详细.挖掘这些信息相当的费时间,我希望在了解了ASP.NET底层机制后,你能获得和我一样的满足感.
在结束之前让我们快速的回顾一下我在本文中讨论的从IIS到处理器(handler)的过程中,事件发生的顺序
- IIS获得请求
- 检查脚本映射中,此请求是否映射到aspnet_isapi.dll
- 启动工作进程 (IIS5中为aspnet_wp.exe,IIS6中为w3wp.exe)
- .NET运行时被载入
- IsapiRuntime.ProcessRequest()被非托管代码调用
- 为每个请求创建一个IsapiWorkerRequest
- HttpRuntime.ProcessRequest()被工作进程调用
- 以IsapiWorkerRequest对象为参数创建HttpContext对象
- 调用HttpApplication.GetApplicationInstance()来从池中取得一个对象实例
- 调用HttpApplication.Init()来开始管道事件并挂接模块和处理器
- HttpApplicaton.ProcessRequest被调用以开始处理.
- 管道中的事件被依次触发
- 处理器被调,ProcessRequest函数被触发
- 控制返回到管道中,后处理事件被依次触发
有了这个简单的列表,记住这些东西并把他们拼在一起就变得容易多了.我时常看看它来加深记忆.所以现在,回去工作,做一些不那么抽象的事情…
虽然我都是基于ASP.NET1.1来进行讨论的,不过在ASP.NET2.0中这些处理过程看上去并没有发生太大的变化.