基于.NET平台的分布式应用程序的研究

 

摘 要:.NET框架是Microsoft用于生成分布式Web应用程序和Web服务的下一代平台。概述了用于生成分布式应用程序的.NET框架的基本原理。重点讲述了.NET框架的基础:公共语言运行时(CLR)和微软中间语言(MSIL),以及.NET革命的核心:Web Service。最后结合具体步骤,给出了利用.NET平台建造具有良好可伸缩性的分布式应用程序的过程。

关键词:.NET;分布式计算; Web服务; CLR; MSIL

 

      The Research of Distributed Application Based on .NETPlatform

LI Hao-chen, CHENHe-bei

(College ofComputer Science&Technology,Wuhan University ofTechnology,WuhanHubei430070,China)

 

Abstract:The.NETFramework isMicrosoft’s next-generation platform for building Distributed Web Applications and Web Services.This article presents an overviewon the.NETFramework’s basic principle for building distributed applications. The point related the.NETFramework’sfoundation: CommonLanguageRuntime (CLR),MSIL(MicrosoftIntermediateLanguage), andthe core ofthe.NET

revolution: Web Service.Finally, throughthe concrete step, providedthe processthat constructedthe distributed applicationofthegood flexible function based on the .NETplatform.

Key words:.NET; Distributed Computing; Web Service; CLR; MSIL

 

1 引言

Internet技术特别是Web技术在20世纪90年代中期成为技术主流时,业务计算的模型发生了巨大变化,而这一变化的焦点则是对传统的客户端/服务器(Client/Server)的计算模式产生了巨大的冲击。首先,客户机/服务器结构在维护上需要极大的成本,尤其是当客户端位于不同的区域时;其次客户端/服务器模式不具有很好的可伸缩性,因为客户机/服务器结构能够支持的客户端用户人数有一定的限度,当客户端用户的数目超过200的时候,客户机/服务器结构的执行效率便开始下降,这对于Internet/Intranet和电子商务等应用系统而言,这种客户端用户人数的限制是不可接受的。

与此形成对比的是:Web模型是由各种信息和应用程序集合所组成的层松散地连接而成,而这些信息和应用程序又驻留在种类繁多的硬件平台上。Internet技术之所以能够取得飞速的发展,其根本的原动力在于它能给用户提供一个可伸缩、可扩展和高度可用的公共信息传送平台。这一平台设计上非常灵活,而且不局限于一个或两个计算层。

针对Internet/Intranet迅猛发展的现状,微软于20006月发布了名为Microsoft.NET的下一代软件和服务战略,使其利用以互联网为基础的分布式计算和通信激增的特点,通过先进的软件构架,利用网络协议和格式,来协调众多的智能设备与网站,从而提供更简单、更为个性化和更有效的互联网服务。

本文通过对分布式体系结构最前沿的发展状况的研究,阐述了微软最新推出的.NET平台架构。

2 .NET平台框架结构

从分布式应用系统的角度来看,一个网络项目应该具有如下特点:能够与用户进行交互;处理某些数据;并且在某处保持它的状态。由此可见,它最少分为三层:外观层(Presentation Layer)、事务逻辑层(Business Layer)、数据服务层(Data Layer),或者更多层。将三层结构同单一结构作对比,可以看到后者把事务逻辑和用户界面这样的抽象概念都捆绑在了一起。

.NET框架是一种新的计算平台,它包含了操作系统上软件开发的所有层,它提供了微软平台(或者说任何平台上)所曾见过的组件技术、呈现技术和数据技术的最丰富的集成级别,整个体系结构已经被创建为易于在高度分布式Internet环境中的应用程序开发,就像进行传统的桌面系统开发一样。

.NET框架旨在实现下列目标:

●提供一个一致的面向对象的编程环境,而无论对象代码是在本地存储和执行,还是在本地执行但在Intenet上发布,或者是在远程执行的。

●提供一个将软件部署和版本控制冲突最小化的代码执行环境。

●提供一个保证代码(包括由未知的或不完全受信任的第三方创建的代码)完全执行的代码执行环境。

●提供一个可消除脚本环境或解释环境的性能问题的代码执行环境。

●使开发人员的经验在面对类型大不相同的应用程序(如基于Windows的应用程序和基于Web的应用程序)时保持一致。

●按照工业标准生成所有通信,以确保基于.NET框架的代码可与任何其它代码集成。

1所示为.NET框架。

 

.NET框架具有两个主要部件:公共语言运行时和.NET框架类库。

2·1 公共语言运行时

公共语言运行时(Common Language Runtime,CLR)是.NET框架的基础,可以将运行时看作一个在执行时管理代码的代理,它提供核心服务(如内存管理、线程管理和远程处理),而且还强制实施严格的类型安全以及可确保安全性、可靠性的其它形式的代码准确性。事实上,代码管理的概念是运行时的基本原则。

如果听说过虚拟机的话,一定会对JVM(Java VirtualMachine)有所了解,Java跨平台的特性,其实就是利用虚拟机的原理做出来的。所谓虚拟机,就是仅含有指令集的一个通用的虚拟机器。通过虚拟机,能够将中/高级语言的程序编译为虚拟机的机器语言程序,再通过虚拟机的Runtime(执行时环境),将这些机器码转换成可在本地执行的实体机器的机器码。

微软中间语言(Microsoft Intermediate Language,MSIL),就相当于虚拟机的机器码,它是一种与机器平台、操作系统都无关的虚拟机的语言。无论使用哪一种语言来撰写程序,当使用.NET开发工具的编译器来编译程序的时候,程序都会被编译成MSIL的格式。

利用MSIL,可以实现跨语言的合作。例如:我们可以利用C#语言与系统整合的特性,设计出程序的核心部分。另外,在程序的前端部分,利用Visual Basic具有简便、快速开发的特性,可以让程序人员快速地开发出漂亮的程序接口,并在VB的工程中引用或继承以C#设计出来的核心部分的程序。由于所有的程序都能编译成MSIL语言,而所有语言编译器都能读懂MSIL的信息,因此能够将以前的C#工程与VB工程整合,以便完成不同语言之间的整合。同时,由于MSIL在延用Win-dows平台使用的PE(Portable Executable)的基础上对PE作了扩充,把程序的Metadata(摘要信息)一并写入可执行文件中,使现在的MSIL程序具有了自我解释的能力,使系统不再依赖于登录数据库。这种做法不但可以减少以往的“DLL地狱(DLLHell)”问题,也方便了系统对程序的管理,减少了用户的负担。

如果说中间语言是一种虚拟机的语言的话,那么公共语言运行时(CLR)便是这个虚拟机的实例,也就是要执行这个虚拟机语言的Runtime。CLR的核心是一个执行引擎,它加载、执行和管理已经编译为中间字节代码格式的代码,这种代码不被解释,在执行之前通过内置在CLR中的即时编译器将它编译成本机二进制代码。

这就意味着在.NET中有两个级别的编译器,语言编译器得到源代码并且创建MSIL,这种MSIL字节代码可移植到任何.NET平台,在执行时,这种代码再被即时编译器编译为二进制代码,以便于机器执行。

2·2 .NET框架基本类库

.NETFramework提供了一套操作系统层级的对象函数库,可供程序语言调用使用,它为数据输入/输出、安全性等提供了服务和对象模型。例如:ADO的下一代叫做ADO.NET,就驻留在此。此外还包括的内容是利用XML工作的核心功能,包括语法分析器和XSL转换器。.NETFramework Class Library具有的一个重要特点是它与程序语言紧密结合,将Class Library整合到所有支持.NET的程序语言中,使得所有的语言都有着共同的对象函数库。这就使得未来的程序员在学习写程序时,只需要学习这种语言的语法规则以及程序流程即可,至于其它的,因为都是调用同一个函数库,所需要的方法也就几乎相同,这对传统的程序开发人员来讲,无疑是一个全新的体验。

3 .NET的Web技术

Microsoft.NET是微软推出的第三代面向互联网的技术平台。第三代Internet的特征将是“可编程Web(Programmable Web)”,各个网站与各个系统之间能够更紧密地整合在一起。B2B(Business to Business)、供应链(SupplyChain)、Application Service Provider等也将真正的落实,而且这些Web服务可以在各种不同的便携设备(如手机、PDA和信息家电等)上执行,真正做到“信息无所不在,随手可得”的境界。

3·1 ASP.NET

ASP(Active Server Pages)是微软开发的基于WindowsNT/2000和IIS(InternetInformationServer)的服务器端脚本环境,是当今非常流行的开放式的Web服务器应用程序开发技术。ASP既不是一种语言,也不是一种开发工具,而是一种技术框架。ASP的主要功能是能够把脚本、HTML组件和强大的Web数据库访问功能结合在一起, 形成一个能够在服务器上运行的应用程序,并把按用户要求专门制作的HTML页面送给客户端浏览器。

ASP的工作流程大致是:当浏览器从Web服务器上请求.asp文件时,服务器调用ASP; ASP全面读取请求的文件,执行所有的服务器端脚本,并将脚本输出与静态HTML代码进行合并,最终的HTML页面将在HTML响应中传送给浏览器。

ASP.NET是由ASP发展而来的,但它与ASP有着本质的不同,主要有以下几点:

●ASP属于一种解释型的编程框架,它的核心是VBScript和JavaScript。受这两种脚本语言的限制,决定了ASP无法进行像传统编程语言那样的底层操作;ASP.NET则是一种编译型编程框架,除了与ASP一样可以采用VBScript和JavaScript作为编程语言以外,还可用VB.NET,C#和JScript.NET甚至是COBOL等编译型语言来编写,这就决定了ASP.NET功能的强大,它可以进行很多底层操作。

●由于ASP程序是解释执行的,因而其执行效率相对较低;而ASP.NET程序则是编译后执行,因而效率比ASP高得多。

●ASP代码不够结构化,其中混合了显示界面的HTML代码及客户端和服务器端的脚本代码,不仅程序很难维护,而且调试也是一个大问题;ASP.NET使用事件驱动和数据绑定的开发方式,将程序代码和显示的内容分离,使ASP.NET程序更简洁,也更具可读性。

●若ASP程序中使用到COM组件,则程序的部署过程就会变得复杂起来,因为组件在使用之前得先注册,将组件的一些信息(如组件文件的所在位置、线程模型和一些误别码等)登录到系统中,在配置和维护时,DLL陷阱(DLLHELL)问题就会出现;在ASP.NET中,不需要考虑组件注册问题,只要将相关的文件复制到目标机器就可以,简化了部署操作。

●ASP不支持WebService ,而ASP.NET则支持Web Service。

3·2 分布式对象结构

随着网络的使用逐渐成熟,开发人员开始用传统平面格式的编程模式解决一些像可伸缩性、可靠性和自适应性的问题。多层开发开始由局域网连接的不同计算机上分散应用程序的数据、数据处理过程和用户见面,通过允许增长和提供冗余度,使得程序伸缩性更强,更加可靠。

程序设计理念的革新推进了软件工程的演进,分布式对象结构也就随之而生。分布式对象结构,可说是标准的对象结构与远端程序调用的结合。当主程序在调用对象时,通过分布式对象的机制,代为处理底层的网络通信问题,帮主程序定位到存放对象的远程电脑,并启动远端电脑中的对象。等远端电脑执行完毕后,分布式对象机制再把返回值返回给主程序。所有这一切,对于调用对象的Client端来说,几乎是透明的,它并不会明显感觉到自己是在取用远端的对象。

分布式对象结构,由最初的RPC(Remote ProcedureCall,远端程序调用)演进到现今最热门的由OMG(ObjectManagement Group)组织提出的CORBA、微软推出的DCOM技术以及Sun公司推出的Java-RMI等。所有的这些分布式对象结构,由于它们允许企业重用现有的功能,并提供了封装的对象方法论,以防对某一业务逻辑的改变会影响到另一个业务逻辑,因此明显减少了开发时间和成本。同时,由于采用了类似于可管理的ORB对象,使得应用分布式对象的应用程序可以减少维护和客户端的负担。

但具体到每一个对象结构标准,又各具有不同的特点以及局限性。例如:DCOM由于它是基于COM的———用于目前最为流行的桌面对象模型,并且包含在操作系统中,使得它的建制成本很低,在Windows平台中广为流行。但DCOM本身也存在着问题,首先是客户电信传输功能,大部分防火墙不允许DCOM调用通过,除非你有机会得到源代码或在本地请求远程组件,否则没有办法通过查询DCOM来了解方法和属性是否可用;还有,DCOM没有标准的数据传输协议。而OMG组织的COR-BA,尽管因为其跨语言、跨平台的特性而得到学术界的广泛喜爱,但正是由于开放性产生了兼容性的问题,使得标准难以实现,导致在Object Request Broker之间缺乏互用性,并且由于CORBA并不集成在操作系统中,因此增加了软件部署的成本。

考虑网络的性能和编程环境的特征的分歧,微软推出了其分布式对象结构的新标准———SOAP。SOAP(Sim-pleObjectAccessProtocol,简单对象访问协议)是对象同信息交换的通信协议。与以前的DCOM相比,在通信协议上,由于其采用标准的应用与WWW服务的标准HTTP协议,而不是DCOM应用的专用的DCE RPC规范,使得其可以通过防火墙,从而大大减少了网管的工作;在通信端口上,SOAP使用的是PORT 80,而DCOM使用的则是PORT135;在信息编码上,SOAP一改传统DCOM所使用的NDR编码规则,而采用XML的国际标准作为信息传递的编码规则,从而允许开发人员用类似HTML格式为分层的数据传输创建定制标记。可以说:SOAP=HTTP+XML。

3·3 XML Web Service

Microsoft.NET的理想是全球分布系统,在单个应用程序中像使用万能胶一样使用XML,允许使功能跨越组织甚至跨越世界运行在不同的计算机上。在这种设想中,从服务器到无线掌上电脑的系统,以及其间的所有事物,都将共享相同的通用平台;对于它们全部来说,.NET版本都是可用的,它们之中的每个都能够与其它方透明地集成。

Web Services是实现这一理想的机制。在Web Services中,软件功能展示为一种服务,它并不在乎服务的使用者是谁(除非有安全考虑因素),Web Services使得开发人员为了整体集成和分布解决方案而建立应用程序时,可以使企业应用程序的中心业务要素通常由本地管理,而支持它们的服务(如用户认证、文件存储、用户首选项管理、日历、邮件等)却无须本地管理,可以被无缝订购。

XMLWeb Services正在开创一个分布式应用程序开发的新时代,XMLWeb Services是提供特定功能元素(如应用程序逻辑)的可编程实体,任何数量的、可能是完全不同的系统都可以用常见的Internet标准(如XML和HTTP)访问它。XMLWeb Services既可以在内部由单个应用程序使用,也可以通过Internet公开以供任何数量的应用程序使用。由于可以通过标准接口访问,因此XMLWeb Services使异类系统能够作为单个计算网络协同运行。

在.NET架构下,Web Services转换为一种组件服务,从而使得传统的Web角色有了变化,Web用户也不再只是一般的用户或是浏览器,而是新类型的应用程序,如图2所示。

从图2中可以看出:XMLWeb Services是一些应用程序,这些应用程序采用标准协议(如HTTP,XML,XSD,SOAP和WSDL)在可伸缩的、松耦合和无状态环境中提供交换消息的功能。XML Web Services使在异类环境中的公司内部和公司之间生成模块化应用程序成为可能,并使得这些应用程序可与各种实现、平台和设备进行互操作。这些应用程序的基于SOAP的XML消息具有显式定义部分(结构化的和类型化的)或不严格定义的部分(使用任意XML)。在不破坏协议的情况下,消息随着时间不断发展的能力是XMLWebServices(XMLWebServices用作将来Web的生成块)的灵活性和可靠性的基础。

XMLWeb Services通过使用XML消息处理启用数据交换和应用程序逻辑远程调用,使数据能够通过防火墙,并在异类系统之间移动数据。虽然数据和应用程序逻辑的远程访问不是一个新概念,但以松耦合的方式进行这种操作却是一个全新的概念。XML Web Services的客户端和XMLWeb Services之间的惟一假设是接收者理解其接收到的消息。这样,用任何语言编写的、使用任何组件模型和在任何操作系统上运行的程序都能够访问XMLWeb Services。

在.NET架构下,微软使用WSDL(Web Services Description Language,Web Services描述语言)这种用XML开发出的语言来向用户描述Web Services提供的服务,并依靠DISCO(Discovery of Web Services)规范了用户程序如何取得Web Services的WSDL;最后通过建立一个跨产业、跨平台的开放性架构———UDDI(Universal Description,Discovery and Integration),让WebServices的供应商在上面发布自己提供的服务,从而让Web Services的用户可以找到自己感兴趣的Web Services。

4 .NET平台下的分布式应用程序示例

开发分布式应用程序的一个可能的方案是一次创建一层,多半是从数据层开始,然后移到中间层业务规则对象,最后创建用户界面层。限于篇幅,本示例以某医院信息系统(HIS系统)中社保模块的开发为例对分布式应用程序的创建过程作一简要说明:

(1)首先是生成数据层。在本系统中是采用微软的SQLServer 2000构建数据库。

(2)然后创建中间层业务对象。创建的业务对象将在Web服务器上运行,提供分布式应用程序所需的性能和可伸缩性。另外,将把业务对象实现为XMLWeb Services,这样客户端可以使用标准Internet协议从任何平台与所创建的业务对象进行通信。其具体步骤是:

①创建ASP. NETWeb服务项目。在此组件中,将创建与数据存储区的连接并通过数据集获取数据实例。

②创建并配置数据库连接和数据集架构。向XMLWeb Services添加两个对象:SqlDataAdapter和SqlConnection。连接对象创建到数据库的新连接,而数据适配器则查询或更新数据库并将结果发送到DataSet数据集对象中。此数据集将用来显示Web窗体页中的数据。

③从业务对象中公开数据集。此操作使数据集可供Windows或Web应用程序使用。

(3)创建了用于数据访问的中间层业务对象并将其公开为XMLWeb Services后,下一步是创建客户端界面。本系统创建的是Web窗体页。通过创建Web窗体应用程序,并将DataSet和DataGrid以及按钮等控件添加到Web页,然后设置控件的属性并编写相应的代码。

(4)最后是运行应用程序并部署解决方案。

5 结束语

.NET是一种面向网络、支持各种用户终端的分布式开发平台环境。微软的宏伟目标是让.NET彻底改变软件的开发方式、发行方式、使用方式,使软件变为服务。.

NET的核心就是要搭建新一代Internet平台,用于解决网站之间的协同合作问题,从而最大限度地获取信息。.NET通过引入Web Services,使得程序设计师可以将网络上的Web服务视为程序的Building Block,从而构建出更富变化、更及时的应用程序,这将对传统的开发模式提出挑战;同时,也使得软件开发商和用户之间形成一种新的合作关系,即通过互联网来连接的长期合作关系,这也将对整个软件产业的经营理念产生巨大的影响,并为整个软件产业带来无限的商机,从这个意义上来讲,.NET的出现无疑是一次深刻的革命。

参考文献:

[1]李庆发·完全探索Microsoft.NET技术战略[M].北京:中国青年出版社,2002·

[2] [美]Robert Powell Richard Weeks.C#和.NET架构[M].北京:人民邮电出版社,2002·

原文地址:https://www.cnblogs.com/liangxiaofeng/p/5065662.html