ASP.NET基础教程学习笔记:1、架构
一、基础
ASP.NET的核心是.NET类,它们相互合作,对HTTP请求提供服务。基本构架如图:
ASP.NET中所有的类都载入到ASP.NET工作者进程内的应用程序域,它们相互作用并响应相互的请求
在ASP.NET中构建应用程序的过程就是构造一些类,这些类与基础框架中存在的类进行交互,最终的结果是许多类在一个进程中相互协作,并对一个请求提供服务。
进程模型(process model):ASP.NET工作者进程(worker process)是从IIS的进程inetinfo.exe中分离出来的一个单独的工作者进程:aspnet_wp.exe。asp.net的进程模型与IIS中有关的进程隔离设置无关,IIS所处理的许多任务都可以由asp.net在自己的工作者进程里完成。
二、编译和解释的区别
第一次访问ASP.NET程序时,装载页面的速度很慢,因为第一次访问需要:
传统的ASP是将服务端代码交给一个解释器,解释器对服务端脚本解释执行,执行结果并返回。这样导致了页面的生成效率,主要有:
三、aspx继承的基类:Page
<div> PageType: <%Response.Write(this.GetType()); %><br /> PageBaseType:<%Response.Write(this.GetType().BaseType); %> </div>
网页的类型为:ASP。buildpage_aspx,其中buildpage是自定义的aspx文件名,它是将文件名中的“.”替换成“_”而来的。而它的基类是Start.BuildPage,这个是自定义的aspx文件所关联的代码隐藏文件,而我们知道代码隐藏文件都是继承自Page类的。System.Web.UI.Page定义了asp.net中大多数用于请求处理的功能,默认情况下,所有的.aspx都继承自Page类。Page类包含很多成员和方法,用于处理请求。具体参考MSDN System.Web.UI.Page
四、代码隐藏
前面提到的代码隐藏文件就是创建一种介于Page类和aspx类之间的中间基类,中间积累直接派生Page类,aspx类则派生自中间基类。这样的话,就可以从aspx页面中移除很多代码。我们可以在aspx的头部用Page指令的Inherits属性来设定aspx页面继承的中间基类。
事件处理
Page基类继承自Control类,而Control类定义了4个事件:Init,Load,PreRender,Unload。在网页的生命周期中,依次激发这4个事件。
最常用的事件就是Load事件,这里有两种出发Load事件处理函数的方法:
1 protected override void OnInit(EventArgs e) 2 { 3 this.Load += Page_Load; 4 base.OnInit(e); 5 } 6 protected void Page_Load(object sender, EventArgs e) 7 { 8 if (!IsPostBack) 9 { 10 personality.Items.Add(new ListItem("男", "man")); 11 personality.Items.Add(new ListItem("女", "woman")); 12 } 13 Response.Write("test"); 14 }
五、影子复制(shadow copy)
传统的ASP程序中,只要程序正在运行或加载,都要保留一个到组文件的引用,要替换该文件就不得不关闭IIS。ASP.NET通过CLR提供的shadow copy机制防止了这种情况,即更新或替换文件都不必关闭iis的运行。
在.NET中创建一个新的应用程序域时,可以将程序集的影子副本进行配置。AppDomainSetup类(该类初始化AppDomain)向外界提供一个Boolean类型的ShadowCopyFiles的属性和string类型的CachePath属性;AppDomain类提供一个SetShadowCopyPath()方法,用于启用应用程序域的影子复制功能,ShadowCopyFiles属性为特定应用程序域启用该机制,CachePath属性指定影子副本的基目录,SetShadowCopyPath方法指定哪个目录可以启动影子复制。
ASP.NET为工作者进程的每一个应用程序都创建一个单独的应用程序域,每个域启用bin目录下的所有被引用的程序集的影子复制。程序集加载器不是从bin目录加载程序集,而是将所引用的程序集以物理方式复制到另一个单独的目录(应用程序的配置设置中指定该目录)并从这里加载。这种机制还能跟踪程序集的出处,所以更新bin目录里的文件后,会重新复制到影子目录中。
除了影子复制,asp.net还必须能够临时创建和加载程序集。第一次引用aspx时,必须先编译成程序集,然后被asp.net加载。应用程序域支持动态目录(dynamic directory,用AppDomainSetup类的DynamicBase属性指定,用于存放动态创建的程序集)。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。