2024年3月13日发(作者:)
第3章 页面剖析
在Web应用程序上下文中,页面会在第一次被请求时,按需被动态编译。动态编译并不是A
页面(.aspx文件)特有的,还发生在.NET Web服务(.asmx文件)、Web用户控件(.ascx文件)、
HTTP处理程序(.ashx文件),以及其他几种应用程序文件(如文件)身上。运行
时管道模型负责处理输入的(incoming)HTTP数据包,使其从一个简单的特定协议有效负载转化为服
务器端对象——准确地说,是一个系统Page类的派生类的实例。中的HTTP运行库
会处理页面对象,将生成的标记插入响应序列中。处理用户代码的若干事件标志着响应序列的生成各
个阶段,整个过程称为“页面的生命周期”(page life cycle)。
本章会介绍如何将.aspx页面的HTTP请求映射为页面对象、Page类的编程接口,以及如何通过页面
生命周期中的事件处理控制标记的生成。
3.1 页面的调用
先让我们具体认识一下.aspx页面是如何被转化为类并编译为程序集的。特定.aspx资源的程序集的
生成,分为两个步骤进行。首先,该资源文件的源代码会被解析,根据得到的信息,从Page类(或P
age的派生类)派生出相应的类。然后,动态生成的类会被编译为程序集,该程序集之后会被缓存到A
专用的临时目录下。
只要链接的(linked).aspx源文件没有被更改,且整个应用程序没有重启,已编译的页面就一直存在。对已链接的.aspx文件的任何更改,
将使相关程序集变为无效,并在该页面下一次被请求时,强制HTTP运行库创建新的程序集。 【89】
提示:编辑和之类的文件会导致整个应用程序重启。在这种情况下,在某个页面被请求时,所有页
面会被重新编译。如果Bin文件夹中的程序集被改动(新建或被替换),所有页面也会被重新编译。
3.1.1 运行机制
能够通过基于Internet信息服务(IIS)的Web服务器访问的所有资源,会按扩展名进行组织。任何来
访的请求会被分配给特定的运行时进程模块进行实际的处理。IIS上下文中能够处理Web资源的模块
是Internet服务器应用程序编程接口(ISAPI)扩展——实际是普通的传统Win32动态链接库(DLL),
很像接口,通过预定义的名称和原型,向外暴露了许多API函数。IIS和ISAPI扩展会针对专用的通
信协议使用这些DLL入口方法。当IIS需要ISAPI扩展完成某项任务时,它会在是加载相应的DLL,
并通过有效参数调用适当的函数。虽然ISAPI文档没有指出ISAPI为接口,但它的确是实现了一组公
共编程接口的模块。
1
当某个资源的请求到达时,IIS首先会判断所请求的资源类型。静态资源(如图像、文本文件、HTML
页面和非脚本ASP页面)直接由IIS处理,而不调用任何外部模块。IIS在本地Web服务器上访问被
请求的文件,并将其内容写入输出控制台,这样,发出请求的浏览器便能够接收到它了。需要在服务
器端处理的请求会被传到已注册的模块中。例如,ASP页面会由名为的ISAPI扩展处理。一
般而言,当资源与可执行代码关联时,IIS会将请求交给可执行代码做进一步处理。带.aspx扩展名
的ISAPI扩展会被分配给aspnet_(如图3.1所示)。
图3.1 带.aspx扩展名的资源的IIS应用程序映射 【90】
资源映射信息存储在IIS元库(一种IIS专用的配置数据库)中。在安装时对IIS元库进行修
改,使aspnet_能够处理某些典型的资源。表3.1列出了其中的一些。
表3.1 aspnet_的IIS应用程序映射
扩 展 名
.asax
.ascx
.ashx
.asmx
.aspx
.axd
资源类型
应用程序文件(如)。这种映射能够确保不被直接通过请求而获得
用户控件文件
HTTP处理程序,能够与IIS低级请求/响应服务进行交互的托管模块
实现.NET Web服务的文件
页面文件
标识内部HTTP处理程序的扩展名,用于实现某些系统功能(如应用程序级的跟踪[]或脚本注入
[]等)
此外,aspnet_扩展还能够处理其他Microsoft Visual Studio典型扩展名(如.cs、.cspr
oj、.vb、.vbproj、.config和.resx)。
2


发布评论