《.net平台xml编程基础》由会员分享,可在线阅读,更多相关《.net平台xml编程基础(53页珍藏版)》请在金锄头文库上搜索。
1、五.NET Xml下面介绍.NET平台的XML编程基础。1 .NET.NET是微软公司为了与Sun公司的Java/J2EE/EJB竞争,于2000年6月22日提出来的一种跨语言、跨平台、面向组件编程的新计算技术,是微软COM组件技术的一种发展。.NET适用于客户端程序、Web服务(Web Services)和因特网分布式应用,是生成、部署和运行托管应用程序和XML Web服务的一种多语言环境和可视化开发工具。微软的.NET技术,由(包含公共语言运行环境CLR和框架类库FCL的).NET框架(.NET Framework)和(托管应用程序开发平台)Visual Studio这两大部分组成。PC硬
2、件Win32/64通用语言运行时CLR (CLI)MSMQ(信息队列)COM+(事务、分区、对象池)ADOIISVisual Studio基类库BCLADO.NET与XMLWeb服务用户界面ASP.NET微软中间语言MSIL (CIL).NET框架.NETC#VBC+JScriptPerlJ#Python公共语言规范CLS (CTS)框架类库FCL虚拟执行系统VES.NET技术1).NET框架.NET框架(.NET Framework)是微软为Windows平台设计的一种托管编程模型。这里的托管(managed)是指,程序的代码(元数据、MSIL),特别是程序中的数据和对象所对应内存的分配、指
3、向和释放,全都由.NET的运行环境CLR来代为管理。托管是所有.NET程序的特点。托管代码具有许多优点,例如:跨语言集成、跨语言异常处理、增强的安全性、版本控制和部署支持、简化的组件交互模型、调试和分析服务等。.NET框架的版本有:l .NET Framework 1.0:2002年1月5日推出,随Visual Studio .NET(2002)于2002年2月13日发布。为.NET框架的首个版本,含.NET框架的基本功能,主要由CLR、FCL和ASP.NET三部分组成。l .NET Framework 1.1:2003年4月1日推出,随Visual Studio .NET 2003于2003
4、年5月20日发布。为1.0的升级版,增加了对内置ASP.NET控件和内置ODBC与Oracle数据库的支持、改变了安全性(允许以半可信方式执行视窗窗体程序集Windows Forms assemblies、允许在ASP.NET应用程序中的代码访问安全性)、增加了针对小型设备的紧凑版框架(.NET Compact Framework)、增加了对IPv6的支持、还改变了许多API。l .NET Framework 2.0:2005年11月7日推出,随Visual Studio 2005一起发布。在2.0版中,新增了一个针对本地应用程序的可更精细地控制多线程/内存分配和程序集装入的宿主(hostin
5、g)API、将对泛型(Generics)的语言支持被直接植入CLR中、提供了对AMD的x64和Intel的IA64等64位硬件平台的全面支持、许多新增和改进的ASP.NET Web控件以及新的ASP.NET个性化特征(如支持主题(themes)、外壳(skins)和网件(webparts)等)、增加了许多ADO.NET 的新功能(包括对用户定义类型 (UDT)、异步数据库操作、XML 数据类型、大值类型和快照隔离的支持,以及对允许应用程序通过 SQL Server 2005 支持多活动结果集 (MARS) 的新属性的支持等)、增加了与聪明个人对象技术(Smart Personal Object
6、s Technology)有关的微型版框架(.NET Micro Framework)。l .NET Framework 3.0:2006年11月6日推出,随Windows Vista一起发布。3.0在2.0的基础上,增加了如下4个主要的新模块:u WPF(Windows Presentation Foundation,视窗表示基础)一种基于XML和(使用3D计算机图形硬件和Direct3D技术的)矢量图形的新用户界面子系统和API;u WCF(Windows Communication Foundation,视窗通信基础)一种构建面向服务应用程序的统一编程模型,允许像Web服务一样,在程序之
7、间进行本地或远程的交互操作;u WF(Windows Workflow Foundation,视窗工作流基础)允许使用工作流来创建任务自动化(task automation)和集成事务处理(integrated transactions);u WCS(Windows CardSpace,视窗卡空间)一种软件组件,可安全存储个人数字身份(persons digital identity),并为在特定事务(如登录网站)中选择身份提供统一的界面。l .NET Framework 3.5:2007年11月16日随Visual Studio 2008发布。对3.0版的主要改变有:u C# 3.0和VB.
8、NET 9.0编译器中的新特性;u 增加对表达式树和方法的支持;u 扩展方法;u 表达式树在运行时表示高级源代码;u 具有静态类型引用的匿名类型;u LINQ(Language Integrated Query,语言集成查询);u 支持ADO.NET分页;u ADO.NET同步API;u 异步网络I/O API;u P2P网络栈,包含托管PNRP(Peer Name Resolution Protocol,端名解析协议)解析器;u WMI(Windows Management Instrumentation,视窗管理设备)和活动目录API的托管封装;u 增强的WCF和WF运行时(库),允许WC
9、F使用POX和JSON数据,还将WF工作流揭示为WCF服务;u 支持HTTP管线和syndication feeds;u 包含ASP.NET AJAX;u 新命名空间System.CodeDom。.NET框架栈.NET框架主要由运行环境(库/时)CLR和类库FCL两个部分组成。参见下列图示。 托管应用程序操作系统硬件CLRIIS非托管应用程序ASP .NET自定义对象库托管Web应用程序FCL.NET框架环境PC机硬件操作系统(Win32/64/)公共语言运行时(CLR)托管应用程序ASP.NETWindows窗体XML Web服务企业服务ADO.NET其他.NET框架类库(FCL).NET框
10、架WPFWCFWFWCSLINQ实体框架.NET框架3.5的构成计算机硬件操作系统(Winows/Unix/Linux/MacOS等)Java虚拟机(VM)应用程序JSPSwingJAX-WSEJBJDBC其他标准Java包Java环境Java环境的构成可以将.NET框架与Java环境加以对照和比较,二者有着许多类似的地方:CLR似VM而FCL似标准Java包。只是Java早已广泛应用于各种计算机平台,而.NET目前还主要局限于Windows平台;不过Java环境只能使用Java语言,而.NET则可以使用C#、VB、VC、J#、JScript等各种编程语言与工具,真正做到了跨语言。l CLR(
11、Common Language Runtime,调用语言运行库/公共语言运行时) 该运行时/库在组件的运行时和开发时的操作中都起着很大作用:n 在组件运行时,运行库除了负责满足此组件在其他组件上可能具有的依赖项外,还负责管理内存分配、启动和停止线程和进程,以及强制执行安全策略。n 在开发时,运行库的作用稍有变化;由于做了大量的自动处理工作(如内存管理),运行库使开发人员的操作非常简单,尤其是与今天的 COM 相比。特别是反射等功能显著减少了开发人员为将业务逻辑转变为可重用组件而必须编写的代码量。l FCL(Framework Class Library,框架类库) 该框架为开发人员定义并提供了
12、统一的、面向对象的、分层的和可扩展的类库集,其中最主要的是供应用程序编写者使用的.NET基类库(BCL, Base Class Library)FCL中的System子命名空间。通过创建跨所有编程语言的公共 API 集,公共语言运行库使得跨语言继承、错误处理和调试成为可能。从 JScript、Visual Basic 到 C+、J#、C#的所有编程语言(通过托管扩展)具有对框架的相似访问,开发人员可以自由选择它们要使用的语言。CLR类加载器JIT编译器代码管理器垃圾回收器安全引擎调试引擎类型检查器异常管理器线程支持COM编组器FCL支持 在第一次被运行时语言编译器源代码MSIL和元数据JIT编
13、译器本地代码编译运行CLR的构成托管代码的编译与运行各种语言的托管程序源代码,都被对应的语言编译器翻译为统一的MSIL(MicroSoft Intermediate Language,微软中间语言)。MSIL是一组可以有效地转换为本机代码(native code)且独立于 CPU 的指令,它包括用于加载、存储和初始化对象以及调用对象方法的指令,还包括用于算术和逻辑运算、控制流、直接内存访问、异常处理和其他操作的指令。MSIL是.NET跨语言跨平台的基础。托管代码(managed code)被编译成MSIL后,就完全失去了它所使用的源语言特征。因此,各种语言(如C#、VB、VC、J# 和JScr
14、ipt等)所编写的托管程序,在.NET框架下都具有几乎一样的操作功能和执行效率。这得益于MSIL所遵循的CTS(Common Type System,公共类型系统)及其子集与用法常规CLS(Common Language Specification,公共语言规范),这些将在下面介绍。当语言编译器产生MSIL时,它也产生元数据(metadata)。元数据描述代码中的类型,包括每种类型的定义、成员的签名、代码引用的成员和运行库在执行时使用的其他数据。MSIL(或本机代码)和元数据被封装在一个PE(Portable Executable,可移植可执行) 文件中,文件中的元数据以及MSIL的存在,使代
15、码能够描述自身。这意味着不再需要类型库或IDL(Interface Definition Language,接口定义语言),CLR在执行过程中可从该文件中查找并提取所需的元数据。元数据对(作为组件的)托管程序的装载和运行,起着十分重要的作用。为了使代码可最终可在计算机上运行,必须先将MSIL转换为特定于CPU的代码,这通常是通过JIT(Just-In-Time,即时) 编译器来完成的。所谓即时编译器,是指CLR只是在托管程序被第一次实际执行时,才将其编译成本地代码(参见图8-6)。如果一个托管程序在安装后从未被执行过,则不会被CLR翻译成本地代码;如果一个托管程序在安装后被多次执行,也只需要被翻译(成本地代码)一次即可。JIT编译器所产生的本地代码,显然比每次运行都需要靠VM解释执行的Java字节码更快速和高效。而且它比其他非托管语言编译器所直接产生的本地可执行代码也要快速和高效,因为它可以根据用户当前计算机平台中CPU的性能,来动态产生优化的本地代码。元语言使得托管程序是自描述的,MSIL使得托管