快速业务通道

ASP.NET HTTP运行时组成详解

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-21
改)。HttpRuntime 为请求创建上下文,并用与请求相关的 HTTP 信息填充上下文。上下文用 HttpContext 类的实例来表示。

另一个在 HTTP 运行时的设置初期创建的 Helper 对象是文本书写器,用于包含浏览器的响应文本。文本书写器是 HttpWriter 类的实例,此对象对页面代码以编程方式发送的文本进行缓存。HTTP 运行时被初始化后,它将查找实现请求的应用程序对象。应用程序对象是 HttpApplication 类的实例,该类就是 global.asax 文件背后的类。global.asax 在编程时是可选的,但在构建结构时是必需的。因此,如果应用程序中没有构建类,则必须使用默认对象。ASP.NET 运行时包括几个中间工厂类,可以用来查找并返回有效的 Handler 对象以处理请求。整个过程中用到的第一个工厂类是 HttpApplicationFactory。它的主要任务是使用 URL 信息来查找 URL 虚拟目录和汇集的 HttpApplication 对象之间的匹配关系。

应用程序工厂类的行为可以概括为以下几点:

工厂类维护 HttpApplication 对象池,并使用它们来处理应用程序的请求。池的寿命与应用程序的寿命相同。

应用程序的第一个请求到达时,工厂类提取有关应用程序类型的信息(global.asax 类)、设置用于监视更改的文件、创建应用程序状态并触发 Application_OnStart 事件。

工厂类从池中获取一个 HttpApplication 实例,并将要处理的请求放入实例中。如果没有可用的对象,则创建一个新的 HttpApplication 对象。要创建 HttpApplication 对象,需要先完成 global.asax 应用程序文件的编译。

HttpApplication 开始处理请求,并且只能在完成这个请求后才能处理新的请求。如果收到来自同一资源的新请求,则由池中的其他对象来处理。

应用程序对象允许所有注册的 HTTP 模块对请求进行预处理,并找出最适合处理请求的处理程序类型。这通过查找请求的 URL 的扩展和配置文件中的信息来完成。

HTTP 处理程序是一些实现 IHttpHandler 接口的类。.NET Framework 为常见的资源类型提供了一些预定义的处理程序,包括 ASPX 页面和 Web 服务。machine.config 文件中的 <httpHandlers> 部分定义了 HttpApplication 对象必须实例化才能处理特定类型资源的请求的类名。如果 Helper 类是一个处理程序工厂,GetHandler 方法将确定要使用的处理程序类型。这时,将从一组类似的对象中获取适当类型的处理程序,并对其进行配置以处理请求。

IHttpHandler 接口提供了两个方法:IsReusable 和 ProcessRequest。前者将返回一个布尔值,表示处理程序是否可以被汇集。(大多数预定义的处理程序都是汇集的,但是您可以自行定义每次都需要新实例的处理程序。)ProcessRequest 方法包含处理特定类型资源所需的所有逻辑。例如,ASPX 页面的处理程序基于以下伪代码:

private void ProcessRequest()
{
// 确定请求是否是回发 (postback)
IsPostBack = DeterminePostBackMode();
// 触发 ASPX 源代码的 Page_Init 事件
PageInit();
// 加载 ViewState,处理已发送的值。
if (IsPostBack) {
LoadPageViewState();
ProcessPostData();
}
// 触发 ASPX 源代码的 Page_Load 事件
PageLoad();
// 1) 再次处理已发送的值(当
// 动态创建控件时)
// 2) 将属性更改的服务器端事件提升为输入驱动的
// 控件(即复选框的状态改变)
// 3) 执行与回发事件相关的所有代码
if (IsPostBack) {
ProcessPostDataSecondTry();
RaiseChangedEvents();
RaisePostBackEvent();
}
// 触发 ASPX 源代码的 Page_PreRender 事件
PreRender();
// 将控件的当前状态保存到 ViewState 中
SavePageViewState();
// 将页面内容呈现给 HTML
RenderControl(CreateHtmlTextWriter(Response.Output));
}

无论调用的资源类型如何,基于 HTTP 处理

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号