正文

[.NET].NET Framework 框架概述(转)2006-08-31 10:42:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/fengfei/18044.html

分享到:

                                    

.NET Framework

.NET Framework
    .NET Framework 是微软的几个开发团队一起努力发展的成果,最主要用来产生一个可以用来快速开发、部署网站服务及应用程序的开发平台。这个架构是两个项目的结果:第一个项目的目的是用来改善Windows 作业平台上的程序开发,特别是改善COM(Component Object Model,组件对象模块。一种微软所制定的软件技术;让对象的功能可以被其它软件所叫用,可以让组件重复使用、容易更新及维护);第二个项目则是制作一个以发展服务(Service)软件为目标的开发平台。这两个项目团队三年多前就已经在一起工作,他们希望可以发展出一种可以快速开发出以因特网为基础,而且易学易用的开发平台。为了要达到这些目标,所以.Net Framework 在设计时加入了下列特色:

透过因特网的标准做整合
    以XML(eXtensible Markup Language,延伸标注语言)及SOAP(Simple Object AccessProtocol,简单对象存取协议)等标准通讯协议,将各种由不同环境所组成的应用程序及组件整合在一起工作。

松散的整合组件
    大多数具延展能力(可扩充功能)的系统,现阶段是以「异步讯息」为架构而建立的。要建立这种多层的架构非常复杂,而且工具很少。.NET Framework 不需要很严谨的定义每个组件的结构即可很轻松的整合,这样可提高程序的延展性。

支持多种程序语言
    许多程序设计师会使用多种语言来开发他们的解决方案,这是因为每种语言都有它的长处。例如某些语言对于数值计算效率较好,某些语言对于数据库的操作较为方便,而某些语言又有大量的链接库可供使用;所以没有办法强迫别人只学一种程序语言。.NET Framework 把这些语言整合起来,可以让开发人员使用不同的程序语言来开发解决方案,让程序设计师可以选择他们专长的程序语言,企业则可省去重新训练员工的成本。

提高程序设计师的生产力
    现今程序设计师人才非常缺乏,程序设计师在人力不足的情形之下就必需提高生产力,因为每个项目的时程很可能很急促;况且公司也希望赶快结案好再进行下一个项目。正因如此,.NETFramework 的开发团队希望尽可能减少写程序会发生的问题,让程序设计师专心于撰写企业法则(企业处理数据的规则)。所以.NET Framework 有些节省时间的特色,例如容易使用的自动交易机制、自动内存管理,以及丰富的控件。

完善的数据保全
    目前因特网最受大家注目的,就是它的安全性。要设计一个安全性完善的因特网应用程序,在设计时就必须考虑所有组件的保全设计,而不能仅做一部分而已。.NET Framework 在设计安全模型时时即考虑到这点,将所有的数据与程序代码做完善的安全防护。

可用操作系统的服务
    Windows 提供了比其它作业平台更丰富的服务及资源,例如众多的数据存取服务、使用系统所提供的整合安全模式来做身分验证及保全的工作、交互式的使用者接口、成熟的对象模块、交易程序监视以及讯息队列服务。.NET Framework 当然也将这些操作系统所提供出来的功能包装起来,以更简单的方式提供程序设计师使用。
 

                                 

.NET Framework 概要

NET Framework: 就是微软Web Services 引擎
    有许多程序设计师和使用者,非常渴望有一个完善而且透明清楚的基础架构,来建立WebServices(因特网服务)。.NET Framework 就是为了这个需求,而提供的基础架构。.NETFramework 提供了应用程序模型及关键技术,让开发人员容易以原有的技术来产生、布署,并可以继续发展具有高安全、高稳定,并具高延展的Web Services。对于.NET Framework 而言,所有的组件都可以成为Web Services,Web Services 只不过是另一种型态的组件罢了。微软将COM 的优点整合进来,它可以不用像COM 那么严谨的来栓锁两个对象,.NET Framework 以松散的方式来栓锁Web Services 这种型态的组件。这样的结果让开发人员非常容易的发展出强而有力的Web 服务组件,提高了整体的安全及可靠性,并且大大的增加系统的延展性。

.NET Framework: 由三个部分组成
    .NET Framework 的目的就是要让建立Web Services 以及因特网应用程序的工作变的简单,.NET Framework 包括了三大部分:第一个部分是Common Language Runtime(CLR,所有.NET 程序语言公用的执行时期组件),第二部分是共享对象类别库(提供所有.NET 程序语言所需要的基本对象),第三个部分是重新以组件的方式写成的ASP.NET(旧版本则是以asp.dll提供ASP 网页所需要的对象)。


    Common Language Runtime(CLR)架构在操作系统的服务上,它负责应用程序实际的执行,满足所有的应用程序的需求;例如内存管理、处理安全问题、整合不同的程序语言等等。Runtime供了许多帮助程序写作的简化,以及应用程序的部署并同时加强程序稳定可靠的一些服务。不过程序设计师实际上不会被Runtime 所影响,因为他们所面对的是架构在CLR 上面的共享对象类别库,这个共享对象类别库可以被任何程序语言所使用。在这个类别中包含了以建构Web 为基础的应用程序模型,提供以架构Web 服务与Web 应用程序为目标的组件及服务,这个就是我们要讨论的ASP.NET。

Common Language Runtime(CLR)

    想要执行由某种特定程序语言所开发出来的程序,计算机内部必需装置这种特定程序语言的执行时期(Runtime)组件才可以。例如想要执行以VB 所撰写的程序,计算机内就必须有安装VB的Runtime 组件(msvbvm.dll)才可执行;而其它诸如由Java 或是VC++ 等的程序语言所写成的软件,也是需要Runtime 组件才能执行。为什么Runtime 组件如此重要?这是因为Runtime组件内部有该种程序语言所需要的一些核心功能,例如提供该种语言所需要的基本函式及对象等等;所以当程序在执行时会动态的连结到Runtime 组件,取得所需要的功能。但是不同的程序语言所需要的Runtime 不一样,所以会造成程序设计师在开发时的困难。另外在浏览网页时,如果该网页有包含有类似以VB 这种程序语言所开发的ActiveX 控件时,除该控件会被下载外,如果使用者没有安装VB 的Runtime 组件,那么执行起来会发生些问题。所以为了要解决上述的问题,.NET Framework 在发展时,设计了让所有.NET 的程序语言共同使用的Runtime 组件,这个组件的名称就叫做Common Language Runtime(CLR)。CLR 是一个高效率的执行引擎,程序代码的执行是由Runtime 所管理,Runtime 负责的工作有产生对象、方法(methods,对象所能执行的动作称之)的呼叫等等,Runtime 也可以提供程序代码一些额外的服务。我们把要透
过CLR 的控制,才能执行的程序代码称为Managed Code。


Intermediate Language 及Just In Time 编译器
    在了解CLR 所扮演的角色后,我们要介绍IL(Intermediate Language)以及JIT(Just In Time)编译器。旧版的ASP 是以直译的方式一行一行的执行程序,所以如果网页程序太复杂或是浏览人数变多,或是服务器负载变重,其执行的效率可想而知。ASP.NET 为了改善执行的效率,以及让程序将来可跨平台执行,所以便设计了IL 以及JIT 编译器。IL 这种架构非常接近机器码,可以非常有效率的透过JIT 编译器转换为机器码;而透过JIT 编译器所编译出来的机器码还是被CLR 所管理。IL 含有许多广泛的指令,不但包括对象的加载、排序、初始、以及方法呼叫的指令(关于对象、方法等,第三章有详细的讨论),而且还有算数暨逻辑运算、流程控制、直接内存存取,以及例外处理的指令。不过因为每个CPU 的架构都不一样,所以IL 不能够直接执行;必需透过JIT 编译器先转换成被CPU 所认识的指令后才可执行。只要有支持该种CPU 架构的JIT 编译器,就可以把IL 编译成可以在该CPU 架构上执行的机器码,这意味着IL 透过各种JIT
编译器将可以跨平台。而IL 这种格式又非常接近机器码,直接由这种格式透过JIT 编译器编译成机器码的速度又非常的快,所以第一次执行aspx 网页时需要编译成IL 效率较差外,尔后只要aspx 网页没有异动过,就只要从IL 透过JIT 编译器编译成机器码就可以执行,效率当然比以前的ASP 网页以直译器来执行的效率提升许多。编译成IL 也有另外一个好处,那就是只要该种程序语言可以被编译成IL,就可以由JIT 编译器编译执行。所以不管该组件用VB、C#、Java 或其它语言所写成的,都可以被结合在一起使用;这个结合组件的动作称为组装(Assembly)。

组件Assemblies
    组件就是组成.NET 应用程序的任何元素,可能来自于.NET Framework 对象类别库中的基础对象,或是我们自行开发的对象。我们利用这些组件来开发.NET 应用程序,最后将这些组件进行组合的动作,使用这些组件将我们的应用程序制作成执行文件(EXE)或是动态连结函式库(DLL)

 

                      .NET 共享对象类别库

    在.NET Framework 出现之前,使用Visual C++ 的程序设计师使用MFC(Microsoft FoundationClasses)对象类别库来写程序,而Visual Basic 的程序设计师则使用VBF(Visual BasicFramework)。现在.NET Framework 将这些对象库整合并统一,设计了一个让所有程序语言共享的对象类别库。这样一来程序设计师不需要再学习多种对象模型或是对象类别库,就可以做到跨语言的对象继承、错误处理以及除错。因为不管是VB.NET 或是C# 等程序语言所使用的对象类别库都一样,所以程序设计师就可以自由的选择他们所偏好使用的程序语言。


    .NET 提供了一个让.NET 所有程序语言使用的共享对象类别库,这个对象类别库提供了几组统一、对象导向、结构化以及可扩充的对象类别库,协助程序设计师快速的开发软件。共享对象类别库中提供了许多对象,包括集合、IO、数据型态等等,也提供一些对象类别可以存取操作系统服务,例如绘图、讯息、网络、执行绪与数据存取等等。程序设计师可以直接建立.NET 共享对象类别库所提供的对象,也可以呼叫共享对象类别库的功能,或者藉由继承某个对象的功能来扩充自己建立的对象。

                             

ASP.NET

共享对象类别库
    ASP.NET 是共享对象类别库中的一员,ASP.NET 提供了一个Web 应用程序模型。这模型提供了一些窗体、控件及基础架构,让程序设计师简单的建立Web 应用程序。ASP.NET 提供了一些对应HTML 元素(例如按钮、清单盒等)的HTML 控件(HTML Controls,第四章会提到)以及功能更强的Web 控件(Web Controls,第六章会提到);这些控件在伺服端执行,然后在客户端的浏览器以HTML 元素的方式显示。这种HTML 控件在伺服端以对象导向的方式被程控,让程序设计师享受到对象导向程序写作的优点,简化程序的复杂性。

使用者接口感应
    ASP.NET 另外一个重要的功能,是这些控件被设计成可以适应客户端,同样的一页可以被广大的客户端平台浏览。换句话说,Web 网页会侦测客户端所需的格式提供适合的网页:提供给行动电话WML,能力较差的浏览器提供HTML3.2,而IE5.5 则提供DHTML。

Web Services
    ASP.NET 也可让程序设计师把软件做成服务(Service Software,在服务器中以提供服务的方式所存在的应用程序)的方式执行。Web Services 是一种可以使用在因特网的程序逻辑,和传统的应用程序可以使用操作系统提供的功能一样,以因特网为基础的应用程序也可以利用WebServices 来增强本身的功能。要解决应用程序间的整合,以及把程序做成服务程序的方法,就是使用Web Services(网站服务,在网站中提供服务)。Web Services 提供简单、弹性,并以标准模块的方法来建立透过因特网工作的应用软件。因特网应用程序可以将Web Services 在不管是否不同平台、不同程序语言所开发,以及不管新旧的情形下轻松的做整合。利用ASP.NET的新功能可以简单的将企业法则写成Web 服务组件,这时ASP.NET 所提供的一些基础架构就负责透过SOAP 或是XML 等标准通讯协议来使用这些服务组件。

Web Services。


了解CLR 实际的运作
对.NET Framework 有个概念之后,我们再来了解CLR 实际的动作:

CLR 的执行。

  1. 首先程序代码先由编译器编译成IL,同时相关联数据会由相关数据引擎(MetadataEngine)产生。
  2. 这时候如果有不同的语言所编译成的IL 或机器码,连结器(Linker)就可以将它连结进来,并产生包含IL 的EXE 或DLL,编译器的功能在这里就算完成了。
  3. 这时当程序在执行的时候,就是CLR 执行工作的时候。程序中如果有任何使用到.NETFramework 共享对象类别库的程序代码时,会被对象类别加载器(Class Loader)载入并合并。这时候被合并的程序代码在JIT 编译器执行之前可以透过查验器(Verifier)来检查型别安全。
  4. 最后由JIT 编译器把程序代码编译成可以被CLR 所管理的机器码便可执行。

阅读(5835) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册