毕业设计(论文)-基于DCOM网络通信平台客户端的实现.doc_第1页
毕业设计(论文)-基于DCOM网络通信平台客户端的实现.doc_第2页
毕业设计(论文)-基于DCOM网络通信平台客户端的实现.doc_第3页
毕业设计(论文)-基于DCOM网络通信平台客户端的实现.doc_第4页
毕业设计(论文)-基于DCOM网络通信平台客户端的实现.doc_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于DCOM网络通信平台客户端的实现摘要随着计算机及网络技术的飞速发展和普及,分布式对象计算技术正成为计算机领域的研究、应用热点。构件技术减少了软件开发人员的重复劳动,以往的软件开发大都是从头开发编写,使用COM技术能通过构建一系列小的组件开发复杂的应用系统。本文介绍的网络通讯平台MSNotice所采用的方案是当今比较流行的分布式组件对象模型(DCOM),使用开发工具Microsoft Visual C+ 6.0,数据库Microsoft Access 2000对通讯平台进行全面开发。本方案具有安全性强,通讯稳定,可扩展功能强大等特点。目前,此通讯平台的已开发的功能还很有限,数据的传输仅限于文本,但由于使用了组件进行开发,使得平台功能的可扩性大大增强了,根据用户的具体需求可以很容易地随时通过组件上留出的接口为平台添加各种所需要的功能。本文采用了大量图片和文字对通讯平台进行详细的说明,对本通讯平台所涉及到的背景技术知识也做了大量详细的介绍,使文章更加通俗易懂。关键词:计算机网络;COM;DCOMAbstract In recent years, global use of the network and computer become ever moreubiquitous among the general population. The explosive growth of Internet and of distributed object computing general has led to significant technologyimprovements in several domains Component significantly reduces the burden on application programmers by relieving them of thiskind of tedious and error-prone programming. Unlike traditional software development, which required each application to build from scratch.COM enables developers to create complexapplications using a series of small software object(COM component).The MSNotice that this article introduce adopt nowadays prevailing Distributed Component Object Model, using develop tools Microsoft Visual C+ 6.0 and database tools Microsoft Access 2000 to go on full development to the communication platform. This scheme can provide you the characteristic of strong security , steady communication ,powerful function expansion and so on. At present, the function development of this platform has been still very limited, the transmission of the data is only limited to the text, but using COM to develop make function expansion of the platform strengthen greatly, through the interfaces that reserve at the component we can easily add the functions of different needs for the platform very according to concrete demand of user at any time.To make the article more easy to understand, this article go on detailed comments with a large number of picture and characters to the communication platform, make a large number of detailed introductions to the communication platform background technological knowledge that platform involve too.Key word:Computer network ;COM;DCOM目录1、绪论41.1课题背景41.2 目前国内外发展状况41.3 本论文主要内容52、文献综述62.1 COM/DCOM技术介绍63、背景技术介绍103.1Visual C+及MFC介绍103.2ATL介绍113.4为什么要做分布式应用114、MSNotice的DCOM实现134.1系统设计方案134.2 数据库的设计154.3 客户端程序164.4创建ChatDll组件174.5 部署并运行应用程序184.6 对程序的进一步讨论225、总结25参考文献:27附录1:28附录2:33致谢401、绪论1.1课题背景21世纪是以网络为核心的信息时代,它的主要特征就是数字化,网络化和信息化。而在“三网”即电信网,有线电视网和计算机网络中发展最快并起到核心作用的就是计算机网络了。而计算机网络中,网络通信平台的发展大大缩短了人与人之间沟通的距离。一直以来,本人实习的公司都是在用美国微软公司的产品MSN Messenger没有自己内部的网络通信平台,由于MSN Messenger需要与Internet连接,这大大增加了公司的花销成本,为了减小公司的花销成本和提高员工们对网络知识的进一步认识,公司决定自主开发一种适合公司内部使用的通讯平台,要充分的体现实用性和可扩展性。在确定需求后,我们进行的综合的对比,最终,我们决定在WINDOWS SERVER 2000平台下用Microsoft Visual C+进行开发。关于采用何种通信手段,我们仔细的对比一下在Visual C+中常用的WINSOCK和现在比较流行的网络通信手段DCOM组件。WINSOCK的特点是基于系统低层,数据传输速度自然就快一些,这也是在以前为了保证网络传输速度而普遍使用WINSOCK作为通讯手段的原因之一,然而随着互联网的不断发展,通讯平台传输的数据量越来越大,网络安全问题的不断增多,基于WINSOCK通讯平台的安全性不高,传输过程不稳定等弊端日渐明显;相反,以前制约组件技术的带宽瓶颈却得到了很好的改善,而且,由于组件技术采用的是二进制代码级的标准而不是源代码级的标准,对今后平台的升级和功能扩展提供了方便。在这样的前提下,我们决定使用当今比较流行的分布式组件对象模型(DCOM)作为这个通讯平台的主要开发方案。1.2 目前国内外发展状况目前,国内外比较流行的网络通信平台主要有两个。一个是美国微软公司生产的产品MSN Messenger。该产品与微软开发的邮件系统进行了完美的结合,通过注册电子邮件就可获得该产品的登陆ID和登陆密码,该产品具有传送非文本文件、语音视频聊天、多用户同时会议等功能,该产品的缺点是不能查看历史纪录,不能对不在线的用户发送消息。另一个网络通信平台就是由中国深圳腾讯公司生产的产品QICQ。该产品具有查询在线用户、查看历史纪录、在线游戏等功能。缺点是不能进行多人同时会议。1.3 本论文主要内容第一章讨论了本论文的课题背景及其研究的内容和意义。第二章简要论述了与本论文相关的各种技术,包括:MFC、COM/DCOM技术等。第三章详细的论述的MSNotice的DCOM的实现过程。2、文献综述2.1 COM/DCOM技术介绍2.1.1 COM/DCOM概述分布式组件对象模型DCOM(Distributed Component Object Model)建立在ActiveX、OLE/COM基础上,底层实现基于分布式计算环境DCE中核心技术RPC(Remote Process Call)技术,是Microsoft公司提出的类似于CORBA的一种技术,是Microsoft的组件对象模型COM在网络方面的发展。组件软件技术的基本思想是:将大而复杂的软件应用分成一系列的可先行实现、易于开发、 理解和调整的软件单元,也就是组件(components)。以此为基础的软件解决方案,效率高, 花费也低。这种方案有利于在整个计算机工业形成软件开发的规模效益。采用组件结构开发软件的优势在于:(1)缩短开发时间:由于编程人员可将先行开发的部件装配到新的程序中,从而加速了新程序的开发。(2)降低集成费用:在将组件集成为一个完整的方案时,不同开发商采用了一致的标准接口,减少了特殊的定制工作。(3)开发更具灵活性:只需简单调整全部应用的一些组件,即可为企业不同领域的应用提供特定的解决方案。(4)降低软件维护费用:各组件的软件功能是相对独立的,在维护和升级一个组件时,不必变动整个应用。降低了费用,维护简便。2.1.2 DCOM结构DCOM是组件对象模型(COM)的进一步扩展。COM定义了组件和它们的客户之间互相作用的方式。它使得组件和客户端无需任何中介组件就能相互联系。客户进程直接调用组件中的方法。图1说明了组件对象模型的表示法: 图2、1同一进程中组件COM组件有两种进程运行模型,即进程内组件和进程外组件。在进程外组件中包括本地进程外组件和远程组件,远程组件也就是DCOM。本地进程外组件是在同一台计算机上运行,进程件的通信是通过LPC(Local Process Call)来实现的,其通信的示意图如图2.1所示:图2.2 客户与本地进程外组件的通信示意图当客户进程和组件位于不同的机器时,就成为DCOM形式。DCOM仅仅只是用网络协议来代替本地进程之间的通讯。无论是客户还是组件都不会知道连接它们的线路是通过网络进行的,这样就使得DCOM具有了位置透明性。图2.2显示了DCOM的整体结构:COM运行库向客户和组件提供了面向对象的服务,并且使用RPC(Remote Process Call)和安全机制产生符合DCOM线路协议标准的标准网络包。图2.3 客户与DCOM组件的通讯示意图由上图可以看出,客户程序其实是通过RPC、DCOM协议和其他计算机上的组件进行通信的。2.3.3 COM/DCOM特点(1)可伸缩性使用DCOM建立起来的应用程序能很好的适应用户数量增多、数据量不断增多的变化情况。当用户数比较少,数据量不大时,系统显得小而快;当应用规模增大时,系统也能够正常运行并且在保证性能的情况下不影响可靠性。(2) 位置透明性DCOM提供了灵活的配置方案,允许不同的组件对象运行在不同的服务器上,DCOM保证这种变化可以不必修改组件员程序,只需在相应的服务器上进行适当的配置就行,客户程序能象在本机上使用COM组件一样使用DCOM组件。(3) 可配置性使用DCOM模型建立的分布式软件系统可以很方便的对系统进行重新配置,包括服务器的变化、客户城学的自动安装等,可以使客户程序和组件程序在不改变代码的情况下适应不同的网络环境。(4) 安全性DCOM使用了Windows NT提供的扩展的安全框架,Windows NT提供了一套稳固的内建安全模块,用来提供从传统的信用领域的安全模式到非集中管理模式的复杂的身份确认和鉴定机制。DCOM通过让开发者和管理者为每个组件设置安全性环境而使安全性透明。类似Windows NT允许管理员为文件和目录设置访问控制列表一样,DCOM将组建的访问控制列表存储起来,这些列表清楚的指出了哪些用户或用户组有权访问某一类的组件。DCOM实现的安全分为访问安全性和激发安全性,访问安全性指定哪些用户可以调用组件对象,激发安全性指定哪些用户可以在一个新的进程中创建新的对象。(5) 协议无关性DCOM并不要求专门的网络协议,因此使用DCOM建立的分布式应用系统对网络有较强的适应能力,DCOM能够支持包括TCP/IP、UDP、IPX/SPX和NetBIOS在内的任何一种传输协议,DCOM提供了基于所有这些不连接和面向连接的协议的一种安全性框架。开发人员完全可以利用DCOM提供的底层网络通信能力,而不需考虑底层的协议。(6) 平台无关性DCOM的平台无关性包括两个方面:平台二进制标准和跨平台的互操做标准。DCOM定义了一个平台二进制标准,因此顾客和开发者可以将使用由不同卖主提供的工具开发的组件互相混合和匹配起来,甚至可以在不同的DCOM运行库中使用它们,使用DCOM可以将一个二进制版本的组件分布到一个运行着所用其他组件和运行库的平台上去。DCOM也为面向对象的分布式计算定义了跨平台服务,其中包括连接组件、创建组件、组件的定位、激活组件的方法以及一个安全性框架,由于DCOM建立在DCE RPC的基础上,所以能很好的适应不同的系统平台。3、背景技术介绍3.1Visual C+及MFC介绍20世纪90年代以来,随着面向对象程序设计的兴起,计算机可视化编程得到迅猛发展。Visual C十十以其高性能编译技术、对象化设计方法与可视化开发环境的完美结合,一出现便受到广大软件开发人员的青睐。Visual C十+6.0包含了一系列具有丰富功能的编程工具,使编写Windows应用程序变得十分直观;同时,基于类库的设计方法又使编写面向对象的程序变得十分简单。另外,它具有很高的代码效率,与Windows系统有着非常完美的接口,易于进行硬件访问,非常适合开发大型应用程序。所谓微软基础类库,是为Windows平台程序设计的应用框架。MFC是用C+语言设计的,提供了很多诸如对窗口、菜单、对话框进行控制,进行基本的输入输出,存储数据对象的集合等等所必需的代码。在这个框架的支持下,对于不同的应用程序,编程的主要任务是填写各自特殊部分的代码。只要将每个应用专门的代码加入MFC框架,就可以获得相应的应用程序,这大大减少了程序员的工作量,这样程序员就可以将精力集中在算法的实现上。MFC库由130多个类组成,这些类封装了两千多个API函数。MFC类库主要包括两组类:一组是一般用途类,它提供了许多有用的抽象类,如CFile类代表文件,CWnd类是窗口类,这些在Windows的编程中有重要的作用;另一类是OLE类(Object Linking and Embeding一对象的连接与嵌入),这一类专门用于OLE的编程。总体来说,MFC提供了处理关键Windows对象的类,从而可以控制窗口、对话框、画刷、画笔以及字体等等.这些类的成员函数封装了与被封装的Windows对象有关的重要的Win32 API函数。就是说,MFC类库的成员函数调用了Win32API函数(当然也可能进行了一些其他操作)。因此,在MFC中也可以调用Win32API函数。这样便可以获得一个具有灵活性的快速开发环境。在本通讯平台中客户端应用程序的开发便大量使用了MFC。3.2ATL介绍自从1993年Microsoft首次公布了COM技术以后,Windows平台上的开发模式发生了巨大的变化,以COM为基础的一系列软件组件化技术将Windows编程带入了组件化时代。广大的开发人员在为COM带来的软件组件化趋势欢欣鼓舞的同时,对于COM开发技术的难度和烦琐的细节也感到极其的不便。COM编程一度被视为一种高不可攀的技术,令人望而却步。开发人员希望能够有一种方便快捷的COM开发工具,提高开发效率,更好地利用这项技术。针对这种情况,Microsoft公司在推出COM SDK以后,为简化COM编程,提高开发效率,采取了许多方案,特别是在MFC(Microsoft Foundation Class)中加入了对COM和OLE的支持。但是随着Internet的发展,分布式的组件技术要求COM组件能够在网络上传输,而又尽量节约宝贵的网络带宽资源。采用MFC开发的COM组件由于种种限制不能很好地满足这种需求,因此Microsoft在1995年又推出了一种全新的COM开发工具ATL。ATL是ActiveX Template Library 的缩写,它是一套C+模板库。使用ATL能够快速地开发出高效、简洁的代码(Effective and Slim code),同时对COM组件的开发提供最大限度的代码自动生成以及可视化支持。为了方便使用,从Microsoft Visual C+ 5.0版本开始,Microsoft把ATL集成到Visual C+开发环境中。1998年9月推出的Visual Studio 6.0 集成了ATL 3.0版本。目前,ATL已经成为Microsoft标准开发工具中的一个重要成员,日益受到C+开发人员的重视。在本通讯平台中,组件部分的开发使用的便是ATL。3.4为什么要做分布式应用将应用分布化并不是问题的结束。分布式应用引入了一个全新的设计和扩展概念,它增加了软件产品的复杂性,但是带来了可观的回报。某些应用本身就带有分布性,例如多人对战游戏、聊天程序以及远程会议系统等等。因此,一种健壮的分布式计算框架所带来的好处是不言自明的。很多其它的应用也是分布式的,即它至少有两个组件运行在不同的计算机上,但是因为它不是为分布性应用而设计的,所以它们的规模和可扩展性就有很大的局限性。任何的工作流或群件应用程序,大多数的客户机/服务器应用程序一些桌面办公系统本质上都控制着它们的用户的通讯和协作。将这些系统作为分布式系统并能够在正确的地方运行正确的组件会给用户带来好处,并且使人们对网络和计算机资源的运用更加充满信心。设计应用程序时考虑到分布性,能通过在客户端运行组件使应用适用于具有不同性能的不同的客户。 设计应用时考虑分布性能够使系统在扩展上具有很高的灵活性。 分布式应用与它们的非分布式版本比起来具有更大的可扩展性。如果整个复杂应用的逻辑结构可以用一个简单的模型来表示,那么仅仅只有一种方法来增加系统的工作效率:用更快的机器,而无需的应用本身进行调整。虽然现在的服务器和操作系统升级很快,但是买一个同样性能的机器还是比将服务器的速度升级为原来的两倍所花的钱少。有了一个设计适当的分布式应用系统,一台功能不怎么强大的服务器就能够运行所有的组件。当负载增加时,可以将一些组件扩展到价格便宜的附加的机器上。4、MSNotice的DCOM实现4.1系统设计方案4.1.1 系统总体结构clientBMSNotice.exeChatdll.dllclientAMsnotice.exeserverChatServer.exeChatdll.dllChatdll.dllDatadll.dll数据流DataBase控制流图4.1:系统结构图在上图中,clientA,clientB表示的是2个客户端,Server表示的是服务器,DataBase表示的是数据库。MSNotice.exe和ChatDll.dll运行在客户端,CharServer.exe运行在服务器端。4.1.2 客户程序与服务程序之间的通信登陆:用户运行客户端,输入用户ID和PASSWORD,提交后,由CHATDLL.DLL向CHATSERVER.EXE发送连接请求,成功建立连接后将收集的用户信息通过CHATSERVER.EXE传送给DATADLL.DLL,由DATADLL.DLL与数据库进行直接通讯,验证用户合法性,并将CHATSERVER.EXE的处理信息返回给MSNOTICE.EXE。通讯:CHATDLL.DLL将从客户端获得的用户发送的信息进行封装,并发送给CHATSERVER.EXE,CHATSERVER.EXE对信息进行判断处理后,决定该消息是直接转发给在线用户还是写入数据库等待重发。从图中可以看到,CHATSERVER.EXE和MSNOTICE.EXE中都有CHATDLL.DLL在运行,其表示的实际意义是,在CLIENT A 的MSNOTICE.EXE调用CHATDLL.DLL组件的过程实际上是通过CHATSERVER.EXE对CLIENT B上的CHATDLL.DLL组件进行调用,这充分体现了分布式组件模型的特点。4.2 数据库的设计根据数据库设计原理,我们很容易得到如图4.2所示的典型设计结果。数据库access.sdb表useruse uid name password type ownerid act表 messagemid data senduserid achieve message unasks resends表 maskaskid mid uid state 图4.2数据库access.sdb其中,表useruse纪录了所有的用户信息,以uid为主关键字。表message所有用户的通话纪录,以mid为主关键字。表mask纪录了用户的权限,以mid和uid为主关键字。4.3 客户端程序作为实现客户端的主要部分,MSNotice担当着整个系统所有客户界面的设计任务。这部分的设计主要利用的是微软提供的MFC来进行设计。在VC+6.0环境下,创建基于MFC AppWizard(exe)的单文档工程MSNotice,工程属性使用默认值。在工程中添加用来实现模块功能的类及成员函数。其中登陆部分由CLoginDlg类完成,主要实现用户ID和用户密码的录入采集;CSystemTray类实现的是当用户完成正常登陆,并与服务器的连接后,在任务栏中添加系统图标;CMSNoticeView类完成对主窗口的创建,以及窗口功能的实现;CNewListCtrl和CNewTreeCtrl类用来实现用户登陆以后对用户列表的提取并以树形结构显示;CSendMsgDlg类用来实现消息发送功能等。MSNotice与组件ChatDll的通讯是通过以下代码完成的,在MSNotice初始化头文件stdafx.h中添加:#import .chatdllChatdll.tlb no_namespace #import .datadllDataDll.tlb no_namespace其中的.tlb文件是生成组件时自动产生的类型库文件,建立完与组件的连接后还需要在MSNoticeDoc.h文件中添加用来生成智能指针的公有成员变量:IConnectPtr m_pIConn IdbasePtr m_pIdbase智能指针的作用是在程序执行的过程中指向指定组件的接口,通过接口来调用接口函数从而实现功能。实现各功能的类和函数添加完成后,通过编译,最后生成供客户端使用的MSNotice.exe的应用程序。运行后登陆界面如图4.3:图4.3:登陆界面4.4创建ChatDll组件ChatDll组件的作用是当在客户端执行MSNotice应用程序以后创建与服务器的连接。在VC+6.0环境下,创建基于ATL COM AppWizard的组件服务程序ChatDll.dll,作为进程内组件,其程序代码以动态连接库Dynamic Link Library(DLL)的形式实现。在使用ATL对ChatDll进行构建的过程中,共创建了二个接口IConnect和Idbase,并同时支持连接点。IConnect接口所提供的方法主要完成整个平台中客户端与服务器的连接;Idbase接口负责与DataDll提供的接口进行通讯,从而按照客户端的指令完成与数据库的连接,以及对数据库中数据的添加、提取和更改。同MSNotice一样,ChatDll组件为了建立与其他应用程序、组件程序的连接,在它的初始化头文件stdafx.h中也许要加入以下代码 :#import .ChatServerChatServer.tlb no_namespace#import .DataDllDataDll.tlb no_namespace并同样需要生成智能指针:IChatPtr m_pIChatIDataPtr m_pIData以上代码为ChatDll组件与ChatServer和DataDll组件之间的接口通讯做好了准备。ChatDll组件运行在客户端,理论上是可以与客户端应用程序MSNotice集成在一起的,但是为了使整个工程更加模块化,可维护性和可扩展性更强,便将客户端代码的可重用功能部分写入组件来实现。最后,通过编译,生成以动态连接库形式存在的组件ChatDll.dll,同时生成的还有类型库文件ChatDll.tlb等,以提供对组件接口的连接调用。4.5 部署并运行应用程序4.5.1程序的部署正常的组件注册程序被封装在本通讯平台的安装程序中,在安装软件的时候会自动执行,不需要用户手动配置。具体实现过程是:使用Windows系统提供的一个用于注册进程内组件的实用工具RegSvr32.exe,只要进程内组件提供了相应的入口函数,则RegSvr32就可以完成注册或注销工作。命令行如下:.RegSvr32 ChatDll.dll .RegSvr32 DataDll.dll对于进程外组件ChatServer,则在服务器上,命令行执行.ChatServer.exe /RegServer . 这时候服务器组件服务就在服务器上注册完成了,这时进入WINDOWS服务管理器,就会发现多了一项ChatServer服务,启动它,如图4.4:图4.4:启动配置服务至此,msnotice的服务器端就已经配置成功了。为了使客户端连接上服务器DCOM组件能够在网络上顺利地使用,在运行客户端以前需要在命令行中输入DCOMCNFG命令,当启动DCOMCNFG后,它会显示目前机器中的Automation Server以及应用服务器,如图4.5图4.5机器中的Automation Server以及应用服务器可以通过单击要设置的应用程序服务器来进一步设置它的属性。一般来说,建立了一个应用服务器后,它的“身份验证”是设置为“启动的用户”。这代表任何在这个域(Domain)有权的用户都可以使用他的帐号启动这个应用服务器。如果直接使用“启动的用户”,那么在客户端执行应用程序时,应用程序服务器若还没有在中介服务器中执行,应用服务器会被启动,但不会显示任何用户界面。但如果把“身份验证”设置为“交互性用户”,则应用程序服务器的用户界面就会在中介服务器中显示。但是要使用“交互性用户”,则客户端登录的用户必须在中介服务器中有帐号并且中介服务器是使用此帐号登录的,否则会出现访问错误。进入分布式组件配置属性界面配置组件服务,在这里,你可以指定服务器的位置,即在何处调用ChatServer组件。如图4.6:图4.6:指定服务位置至此,msnotice的客户端就已经配置成功了。4.5.2 程序的运行在客户端运行msnotice.exe,在登陆界面中输入用户ID和密码。成功登陆后其他在线客户端收到消息提示,如图:图4.7:用户登陆提示进入对话界面,发送一条需要应答的消息,在线用户便会不停收到系统提示,直到应答。通话完毕后退出。通过调试,既定功能实现,通讯成功。 图4.8:对话界面4.6 对程序的进一步讨论讨论目标不应只限于该程序,而是考虑如何扩展到更庞大、更复杂的分布式软件系统。借用一句流行的广告词:“让我们做得更好”。尽管程序可以正常地工作,但从分布式软件体系结构角度出发,尚有许多问题需要进一步探讨,特别是当要解决的问题变得更庞大、更复杂的时候,分布式软件系统的可扩展性、可靠性、可伸缩性等质量要素变得更加重要。对于程序,我们至少可以考虑并改进以下几个问题。1、可靠性分布式软件系统通常要求比传统的集中式软件系统具有更高的可靠性,当客户程序运行时,可能由于服务程序、Web服务器或网络通信等原因导致无法访问服务程序中的远程对象。当然,利用异常机制可通知客户程序处理这些异常情况,但更理想的是能为客户程序提供多个服务程序备份,当一个服务程序失败时客户程序可转向另一个服务程序请求服务,甚至能自动激活服务程序后再调用其中的服务对象。为做到这点,通常需要一个中间代理机构,所有客户请求交由代理机构后再转发给合适的服务对象,必要时还需由代理机构激活这些服务对象。更复杂的情况是提供客户程序与服务程序之间连接管理的服务质量,例如可由开发人员决定当客户程序与服务对象意外断开后,是否允许客户程序透明地重新绑定到服务对象。2、即插即用RMI要求根据服务对象的远程接口生成一致的客户程序桩与服务程序框架,客户程序必须在编译时知道远程接口的定义,当远程接口发生变化时必须重新生成两端的桩与框架文件。RMI是一种静态的调用方式,因而程序中的组件无法像硬件IC一样具备即插即用的特性。如果能实现动态调用,那么客户程序不必知道服务对象的接口定义。程序员可以开发更加通用的客户程序,这种客户程序可以调用任意对象,包括在编译客户程序时还不存在接口定义的服务对象。3、对象命名与查找分布式软件系统要解决的实际问题远比本程序庞大与复杂,这时整个软件系统中存在大量服务对象,如果所有客户程序都好象例子程序那样用平坦的对象标识来解析服务对象,将会给对象命名与对象查找带来混乱。传统的程序设计技术通过作用域规则让程序员在不同层次的名字空间中命名与查找对象,在分布式软件系统中更需要一种分布式的对象命名与查找机制。4、系统性能可伸缩性(scalability)要求软件系统能有效地处理不同规模的问题,并且系统性能不会明显地降低。由于分布式应用环境通常受制于通信线路的带宽,并且服务程序必须处理潜在的大量客户程序请求,分布式软件系统必须更加注重系统的性能。当请求与数据量不断增多时,影响本程序性能的主要因素有远程方法调用的数量、每次调用时传递的数据量、不同数据类型的打包与解包开销等。如果客户请求需要返回从数据库查询得到的大量数据,则本程序所采用的交互方式会让终端用户等得不耐烦,这时我们必须寻找一种更有效的解决方案。例如可以使用一个重复器(iterator)分段返回数据库查询结果,或者先返回查询结果的索引信息供用户处理。5、对象策略程序中只有一个伺服对象提供服务,当客户请求增多时会引起请求的排队与阻塞,有必要激活更多的对象实例提供服务。不同的分布式应用程序可能有不同的服务对象需求,因而开发环境与运行环境应支持不同的对象策略。例如是采用多线程还是单线程处理请求,服务对象是瞬时对象还是持久对象,服务对象是否允许隐式激活等。6、负载均衡负载均衡是进一步提高系统可伸缩性的一个重要课题。对于多层设计模型,众多服务对象分布在不同的服务器上运行,其中一些服务器可能因接收并处理大量客户请求而不堪重负,而另一些服务器可能只有很少的客户请求需要处理,这显然会影响到整个分布式软件系统的性能。负载均衡的目标是根据各个服务器的计算资源,将所有客户程序的请求尽量合适地分派给不同服务器上的服务对象。负载均衡既可以由开发人员自己设计均衡策略并手工实现这些策略,也可以由运行环境自动地根据某种算法进行调整。如果要由程序员手工实现负载均衡,则必须允许程序员拦截客户程序与服务对象的绑定、参数与返回值打包与解包、每个远程方法调用等环节,程序员还可利用这些机制实现安全性、事务或日志等功能。程序员手工实现负载均衡可针对具体问题的特点设计更有效的均衡策略,但这需要大量额外的工作量,因而有必要同时得到两种支持方式供开发者选择。7、组件技术面向对象技术被公认为当前提高软件可重用性的最有效途径,特别是组件技术近年来更受重视。如果在分布式软件系统开发时能结合组件技术,将大大提高分布式软件系统开发的生产质量与生产率。5、总结DCOM的优点(1)采用COMOCOM组件化系统设计方法,不仅能充分利用第三方软件供应商和其他程序员开发的组件模块,实现方便快捷的应用程序定制,而且能很好地保证系统开发的协调性,缩短系统开发的周期.(2)COM/DCOM的语言无关性为跨语言的合作开发提供了墓础,因此可以充分发挥不同程序员的语言特长,减小系统开发的困难性.(3) COM规范使用包容和聚合机制实现对象的可重用性,但COM/DCOM的可重用机制是建立在二进制规范的接口标准上的,并且是动态的,即可以在对象,B完全独立的情况下,对象A重用对象B的功能,而且当对象B的版本增强后,对象A可以自动重用对象B的新功能.这种可重用机制是类的继承性无法比拟的。(4)基于COM规范的可重用机制以及由于应用程序各组件模块之间是通过组件对象接口建立起来的一种松散的锅合关系,因此,应用程序中的组件是可以随时“更新”和“升级”的,不仅可以实现应用程序简洁的版本化升级。而且可以大大地提高系统的稳定性,可靠性和可维护性。(5) DCOM的位置透明性和平台无关性使基于DCOM的应用程序具有非常灵活的配置方案,当系统规模改变时。可以方便地改变系统的配里.使系统具有良好的可扩充性DCOM的缺点DCOM主要是在Microsoft开发操作系统时所形成的,是一个标准的实践的产物所以它主要用在Windows平台上,在用户的心目中也是这样的但在网络中运行的平台一般是异构的,这导致DCOM的使用受到极大的限制,与分布计算的思想有很大的冲突,这是它的一个致命的缺陷,现在形势有点改变,也有许多的公司推出了支持COM/DCOM的产品,以及与CORBA之间建立了一个桥,DOM for UNIX beta也己发布.另外实际上DCOM不提供自己的安全机制,使用Window:的安全机制,理想的情况下由MTS来提供负载乎衡等工作.它与操作系统的密切结合,这一方面使它的效率空前提高,但又使它的使用受很大的限制。另外DCOM /COM必须调用Windows API,而Microsoft将API进行保密,这对广泛应用它产起了消极作用还有DCOM必须在客户端进行注册之后才能使用它,这与现在的操作透明性的思想是有冲突的,一句话DCOM与操作系统的关系太密切了。COM/DCOM技术是先进的组件技术的杰出代表,它为复杂的大型的应用程序提供了良好的解决方案。目前。COM/DCOM组件技术已经广泛应用于徽软开发的各种软件中。同样,COM/DCOM组件技术也是解决日趋庞大和复杂的分布式交互仿真系统所面临问题的一种很好的方案.本文对COM/DCOM组件技术的分析以及对其在网络通信平台上应用的探讨只是初步的,更深层次的技术细节及其可行性还需进一步研究。参考文献:1 潘爱民著 COM原理与应用M 清华大学出版社第一版 1999.12 袁丁、傅一平著Visual C+精彩实例详解M机械工业出版社第一版2004.13 郑莉董渊著 C语言程序设计M 清华大学出版社第二版2001.7 4Dale RogersonInside COMM Microsoft Press.第一版 19975 兰景英、刘月著 COM/DCOM技术及应用J 玉溪师范学院学报2004.086 黄远铮、郑明辉、伍光胜著COM/DCOM技术的分析及运用J计算机应用研究2001.097 张德贤、郑涛、徐建敏著基于DCOM的电子商务的实现技术J 河南大学学报(自然科学版)2001.038 林勇、应薪洋、董晓华著DCOM分布式组件技术在数据通讯中的应用J重庆大学学报(自然科学版)2003.089 吴荣藤、王美清著基于DCOM的分布计算J重庆工业高等专科学校学报2004.0110 张虹、王建校、金印彬著基于DCOM组件开发的实验管理系统电器J 电子教学学报2004.611 The Architecture of DCOM J.Microsoft Whitepaper,199612 The Technical Overview of DCOM J Microsoft Whitepaper, 1996附录1:安全性使用网络来将应用系统分布化是一个挑战,这不仅是因为带宽的物理限制以及一些潜在的问题,而且也由于它产生一些诸如关系到客户间、组件间以及客户和组件之间的安全问题。因为现在的许多操作可以被网络中的任何一个人访问,所以对这些操作的访问应该被限制在一个高级别上。 如果分布式开发平台没有提供安全支持,那么每一个分布式应用就必需完成自己的安全机制。一种典型的方法是用某种登录的方法要求用户通过用户名及密码的检测,这些一般来说都是被加密了的。应用系统将通过用户数据库或者有关目录来确认以上用户身分,并返回动态的标识符以便用户以后用来进行方法调用。以后每次涉及到调用有安全检查的方法时,用户都需要通过这种安全认证。每个应用系统都要存储和管理许多用户名和密码,防止用户进行未授权的访问,管理密码的改动以及处理在网络上传递密码而带来的危险。 因此分布式平台必需提供一个安全性框架来确切地区分不同的用户或者不同组的用户以便系统或应用有办法知道谁将对某组件进行操作。DCOM使用了Windows NT提供的扩展的安全框架。Windows NT提供了一套稳固的内建式安全模块,它用来提供从传统的信用领域的安全模式到非集中管理模式的复杂的身份确认和鉴定机制,极大地扩展了公钥式安全机制。安全性框架的中心部分是一个用户目录,它存储着用来确认用户凭据(用户名、密码、公钥)的必要信息。大多数并非基于Windows NT平台的系统提供了相似或相同的扩展机制,我们可以使用这种机制而不用管此平台上用的是哪种安全模块。大多数DCOM的UNIX版本提供了同Windows NT平台相容的安全模块。 安全性设置 DCOM无需在客户端和组件上进行任何专门为安全性而做的编码和设计工作就可以为分布式应用系统提供安全性保障。就象DCOM编程模型屏蔽了组件的位置一样,它也屏蔽了组件的安全性需求。在无需考虑安全性的单机环境下工作的二进制代码能够在分布式环境下以一种安全的方式工作。 DCOM通过让开发者和管理员为每个组件设置安全性环境而使安全性透明。就象Windows NT允许管理员为文件和目录设置访问控制列表(ACLs)一样,DCOM将组件的访问控制列表存储起来。这些列表清楚地指出了哪些用户或用户组有权访问某一类的组件。使用DCOM的设置工具(DCOMCNFG)或者在编程中使用Windows NT的registry以及Win32的安全函数可以很简单地设置这些列表。 只要一个客户进程调用一个方法或者创建某个组件的实例,DCOM就可以获得使用当前进程(实际上是当前正在执行的线程)的用户的当前用户名。Windows NT确保这个用户的凭据是可靠的,然后DCOM将用户名正在运行组件的机器或进程。然后组件上的DCOM用自己设置的鉴定机制再一次检查用户名,并在访问控制列表中查找组件(实际上是查找包含此组件的进程中运行的第一个组件)。如果此列表中不包括此用户(既不是直接在此表中又不是某用户组的一员),DCOM就在组件被激活前拒绝此次调用。这种安全性机制对用户和组件都完全是透明的,而且是高度优化的。它基于Windows NT的安全框架,而此框架是Windows NT操作系统中最经常被使用(也是最完美的!)的部分,对每一个对文件或者诸如一个事件或信号的同步线程的访问都需要经过相同的访问检查。Windows NT能够和同类的操作系统以及网络操作系统竞争并超过它们的事实可以显示出这种安全性机制是多么有效。 DCOM提供了一个非常有效的缺省的安全性机制,它使开发员能够在无需但心任何安全性问题的情况下开发出安全的分布式应用。对安全性的编程控制对某些应用系统来说,仅仅是组件级的访问控制列表是不够的,因为一个组件中的某些方法是只能被特定的用户访问的。 例子:一个商务结算组件可以有一个方法用来登录新事务,以及另一个方法用来获得已经存在的事务。仅仅只有财务组(“Accounting”用户组)的成员才能够添加新事务,同时仅仅只有高级管理人员(“Upper Management”用户组)才能查看事务。 正如上一部分所说,应用系统能够通过管理自己的用户数据库以及安全凭据来达到本身的安全。然而,在一个标准的安全框架下工作将会给最终用户带来更多的好处。没有一个统一的安全性框架时,用户需要为他们所使用的每一个应用记住和管理相应的登录凭据。开发者为每一个组件靠虑到安全性问题。DCOM通过加入Windows NT提供的非常灵活的安全性标准将安全性用户化的要求简化为对某些特定组件和应用的需求。使用DCOM安全性标准的应用达到上面例子所要求的有所选择安全性呢?当一个方法调用来到时,组件要求DCOM提供客户的身份。然后根据其身份,被调用线程就仅仅执行允许该客户执行的安全对象中的某些操作。接着组件就试着访问诸如登录字之类的安全对象,这些对象中有一个访问控制列表ACL,如果访问失败,说明客户不在ACL中,组件就拒绝方法调用。通过根据所调用的方法的不同而选择的不同的登录字,组件就能够用一种非常简单,但却灵活而有效的方式提供有选择的安全性。组件也能够很轻易地得到客户的用户名并且利用它在自己的数据库中查找有关的许可和策略。这一策略使用了Windows NT的安全性框架(密码/公钥,传输线上加过密的密码等等)所提供的鉴定机制。应用系统无需为储存密码和其它有关的敏感信息担心。新版本的Windows NT将提供一个扩展的目录服务,它允许应用系统将用户信息存储到Windows NT的用户数据库中。 DCOM的做法更为灵活。组件能够要求不同级别的加密以及不同级别的鉴定,同时可以在自己进行身份认证时阻止组件使用自己的凭据。Inter

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论