ASP.NET Process Model之二:ASP.NET Http Runtime Pipeline - Part II
来源:博客园 作者:Artech 出处:巧巧读书 2008-04-10 进入讨论组【引自Artech的博客】二、ASP.NET Runtime Pipeline(续ASP.NET Http Runtime Pipeline - Part I)
现在我们真正进入ASP.NET管辖的范畴,下图基本上囊括整个处理过程涉及的对象,接下来我们一起来讨论这一系列的对象如何相互协作去处理Http Request,并最终生成我们所需的Http Response。
图1
HttpContext
上面我们介绍了ISAPI在调用ISAPIRuntime的时候将对应的ISAPI ECB Pointer作为参数传递给了ProcessRequest方法,这个ECB pointer可以看成是托管环境和非托管环境进行数据交换的唯一通道,Server Variable和Request Parameter通过它传入ASP.NET作为进一步处理的依据,ASP.NET最后生成的Response通过它传递给ISAPI,并进一步传递给IIS最终返回到Client端。
借助这个传进来的ECB Pointer,我们创建了一个ISAPIWorkerRequest。ISAPIWorkerRequest作为参数传入HttpRuntime.ProcessRequestNoDemand的调用。HttpRuntime.ProcessRequestNoDemand最终体现在调用ProcessRequestInternal。下面是真个方法的实现:
|
对象上面的代码没有必要深究,我们只需要了解大体的执行流程就可以了,下面这一段伪代码基本上体现整个执行过程:
|
首先通过创建的ISAPIWorkerRequest创建按一个HttpContext对象,随后通过HttpApplicationFactory.GetApplicationInstance创建一个IHttpHandler对象(一般情况下就是一个HttpApplication对象)。
正如他的名字体现的,HttpContext体现当前Request的上下文信息,它的生命周期知道整个Request处理结束或者处理超时。通过HttpContext对象我们可以访问属于当前Request的一系列常用的对象:Server,Session,Cache,Application,Request,Response,Trace,User,Profile等等。此外我们可以认为将一些数据放在Items属性中作为状态管理的一种方式,不过这种状态管理和其他一些常用的方式,比如Session,Cache,Application,Cookie等,具有根本性的不同之处是其生命周期仅仅维持在当前Request的Context中。
相关专题
- .NET移动与嵌入式技术 (6027篇文章)
- .NET开发手册 (5718篇文章)
- ASP.NET教程 (8536篇文章)
- ASP.NET应用篇 (2667篇文章)
- HTTP协议 (341篇文章)
- ASP.NET 2.0 中跨网页提交的三种方法 (48次浏览)
- ASP.NET生成静态页面和分页主要的原理 (43次浏览)
- WCF中的发布-订阅服务 (41次浏览)
- ASP.NET应用程序的三层设计模型 (38次浏览)
- ASP.NET 2.0:AdventureWorks系统分析 (37次浏览)
- ASP.NET最常见错误提示 (33次浏览)
- 在asp.net 2.0中使用母版页和工厂方法模式 (29次浏览)
- 理解ASP.NET 2.0中的单点登录 (26次浏览)
- 验证程序块与ASP.NET的集成 (26次浏览)
- .net中gridview疑难解答 (24次浏览)




