2023年11月30日发(作者:)
组件技术
COM/DCOM/COM+COM/DCOM/COM+组件技术
2010-09-1610:03:38|分类:计算机|标签:com组件dcom对象调用|字号大中小订阅
摘要:针对分布、异构的计算环境要求,应用系统的开发遇到了严峻的挑战。本文较
为详细地介绍了微软组件技术的发展过程及相应技术特点,特别是最新的COM+组件技术
引入,对今后应用系统的开发可产生不可估量的效益。
关键词:COM;DCOM;COM+;组件
组件是独立于特定的程序设计语言和应用系统、可重用和自包含的软件成分。组件是基
于面向对象的,支持托放(draganddrop)和即插即用(plugandplay)的软件开发概念。
基于组件技术的开发方法,具有开放性、易升级、易维护等优点。它是以组合(原样重用现
存组件)、继承(扩展地重用组件)、设计(制作领域专用组件)组件为基础,按照一定的集
成规则,分期、递增式开发应用系统,缩短开发周期。在开发过程中遵循以组件为核心原则、
组件实现透明原则及增量式设计原则。
目前,在组件技术标准化方面,主要有以下三个比较有影响的规范:
OMG起草与颁布的CORBA;
微软公司推出的COM/DCOM/COM+;
SUN发表的JavaBeans。
由于Windows操作系统的流行,COM/DCOM/COM+组件技术深受程序员偏爱,目前
已有大量系统基于此组件技术,因此本文着重针对微软的组件技术作一介绍。
COM是个开放的组件标准,有很强的扩充和扩展能力。COM规定了对象模型和编程
要求,使COM对象可以与其他对象相互操作。这些对象可以用不同的语言实现,其结构也
可以不同。基于COM,微软进一步将OLE技术发展到OLE2。其中COM实现了OLE对
象之间的底层通信工作,其作用类似于CORBA/ORB。在OLE2中出现了拖—放技术以及
Edited by Foxit Reader
Copyright(C) by Foxit Software Company,2005-2008
For Evaluation Only.
OLE自动化[1]。
COM规范包括COM核心、结构化存储、统一数据传输、智能命名和系统级的实现(COM
库)。COM核心规定了组件对象与客户通过二进制接口标准进行交互的原则,结构化存储
定义了复合文档的存储格式以及创建文档的接口,统一数据传输约定了组件之间数据交换的
标准接口,智能命名给予对象一个系统可识别的唯一标识[2]。
组件对象模型COM内容复杂,主要包括[4]:
接口:COM对象间互相调用的一组语义相关的接口,每个接口有一个128位的唯一标
识(UUID)。所有的接口皆直接或间接地从IUnkown接口继承而来,IUnkown接口包括
QueryInterface、AddRef和Release。
COM对象:即CoClass实例,提供接口的具体服务。CoClass是一个或多个COM接
口的实现。对COM对象的调用是通过一个指向其接口的指针实现的。
COM服务器:是一个程序或库,包含COM对象,向客户提供服务。
类工厂(ClassFactory):用于创建、注册COM对象的特殊对象,为实例化CoClass
提供一种标准机制。对CoClass进行实例化是通过调用全局WindowsAPI函数
CoGetClassObject或CoCreateInstance实现的。
类型库(TypeLibrary):一个二进制资源文件,包含COM服务器中对象与接口的类型
信息,可以从MIDL或ODL转换而来。
Automation服务器扩展:Automation代表一个应用程序控制另一个应用程序中对象的
能力。Automation服务器是指实现IDispatch接口的对象,IDispatch在IUnkown的基础上
增加了GetIDsOfNames,GetTypeInfo,GetTypeInfoCount以及Invoke接口。
COM应用有如下特点:丰富的综合服务,包括事务、安全性、消息队列和数据存取,
以支持最广泛的应用;组件间通过基于指针的API调用实现互操作,调用透明性好;对
Windows依赖性强,其他操作系统的支持相对不足;供货商可使用多种开发语言开发,如
VC、VB、C++Builder等;定制应用软件和可重用组件的广泛用户基础;可靠的重用性,
充分利用用户和开发人员的现有投资[3]。
图13DCOM4COM+
在COM系统中,客户对组件对象功能的调用接口一般采用COMIDL来描述。COM定
义了两类服务器,进程内服务器(In-process)和进程外服务器(Outofprocess)。进程内
服务器即本地机上的DLL,进程外服务器分为两类,一是本地机上的EXE可执行程序,二是
远程机上的DLL或EXE程序。服务器内部包括组件接口的实现体(InterfaceImplement)和类
工厂(ClassFactory),类工厂生产组件对象,将对象的接口指针返回给客户。组件服务器的
定位由COM库完成并返回对象指针。COM对象位置的透明性处理由COM的服务控制机制
保证。进程外的对象必须先调用服务控制机制提供的代理,代理生成服务对象的远程过程调
用RPC(RemoteProcessCall)[2]。基于COM的系统调用原理如图1所示。
DCOM是微软与其他业界厂商合作提出的一种分布组件对象模型,它是COM在分布计
算方面的自然延续,为分布在网络不同节点的两个COM组件提供了互操作的基础结构。
DCOM增强COM的分布处理性能,支持多种通信协议,加强组件通信的安全保障,把基于
认证Internet安全机制同基于WindowsNT的C2级安全机制集成在一起。但从系统内部的实
现机制而言,DCOM所采用的技术仍符合图1所示的COM模式。
DCOM自动建立连接、传输信息并返回来自远程组件的答复。DCOM在组件中的作用有
如PC机间通信的PCI和ISA总线,负责各种组件之间的信息传递,如果没有DCOM,则达
不到分布计算环境的要求。微软通过纳入事务处理服务、更容易的编程以及对Unix和其它平
台的支持扩充了DCOM。
建立DCOM时和使用COM建立对象的方式是相同的,只需再加入一个机器名称的参数。
如果COM通过WindowsAPI的CoGetClassObject建立对象,只需再输入机器名称的参数
即可在远程指定的计算机中建立对象,并且取得指定接口的信息。它构造于RPC的技术之上,
并且使用TCP/IP作为网络通信协议。
COM+[5]倡导一种新的设计概念,把COM组件提升到应用层,把底层细节留给操作
系统,使COM+与操作系统的结合更加紧密。COM+的底层结构仍然以COM为基础,但在
应用方式上则更多地继承了MTS(MicrosoftTransactionServer)的处理机制,包括MTS
的对象环境、安全模型、配置管理等。COM+把COM、DCOM和MTS三者有机地统一起来,
同时也新增了一些服务,如负载平衡、内存数据库、事件模型、队列服务等,形成一个概念
新、功能强的组件体系结构,使得COM+形成真正适合于企业应用的组件技术。几者之间的
结构关系如图2所示。
微软在MTS的基础上提出了多层软件结构的概念,如图3(a)所示。为实现多层结构
的企业应用,须使用各种分离技术,开发人员费时费力。图3(b)则是微软正在实现的三层
结构模型,在DNA结构中,客户层FORMS+还只是一个技术框架,它把Win32GUI和Web
API结合起来,并朝着DHTML的方向发展,数据层STORAGE+还只是一种提法,不过微软
已经把数据库接口从ODBC转移到ADO和OLEDB上,这将最终促进数据层接口技术的统
一。中间业务层COM+以系统服务的形式把原先散落的一些技术综合起来,并提供简单的编
程模型,以直接应用层的编程接口为应用程序提供服务。COM+是DNA结构的核心,它将成
为企业应用或者分布式应用的基本工具。
图2
图3
COM+组件建立在COM+系统服务基础上,可避免底层繁琐的细节处理,既保证应用程
序的可靠性,又使其更趋于标准化。COM+组件提供可管理、可配置的特性,在创建COM+
对象时通过截取(intercept)技术为其分配一个环境对象(Context),利用对象环境的
IObjectContextInfo接口可以访问到环境的属性信息。下面对截取概念的步骤作以说明:
组件对象通过说明性属性指定一些基本要求;
客户端调用CoCreateInstance函数时,COM+系统检查客户代码是否运行在与对象类兼
容的对象环境中;
如果客户代码运行环境与对象类所要求的兼容,不使用截取技术,直接创建对象并返回
对象的接口引用。否则CoCreateInstance函数切换到一个与对象类兼容的环境中,然后创建
对象并返回一个代理对象;
在以后的接口方法调用中,代理对象在调用前后作一些处理,以便方法的运行环境能满
足要求。
COM+的对象引用即对象接口指针与环境相关,不能简单地把对象引用从一个环境传递
到另一个环境。当客户从一个环境调用到另一个环境中的对象时,中间必须经过代理对象和
存根代码,由代理对象截取调用,负责进行环境切换,保证客户代码和对象分别在自己的环
境中执行。类似于COM的跨进程列集(marshaling)和散集(unmarshaling)处理,即调
用CoMarshalInterface和CoUnmarshalInterface函数,对于支持事务特性、安全特性或其
他特殊要求的应用较为重要。跨环境调用过程如图4所示。
图4作者简介:楼伟进(1972-)男,浙江永康人,主要研究方向:计算机集成制造系统、数据挖掘
与知识发现;应飚(1967-)男,浙江缙云人,主要研究方向:计算机网络与应用系统。
作者单位:楼伟进(浙江大学人工智能研究所浙江.杭州310027)
310027)应飚(浙江大学机械与能源工程学院浙江.杭州
由图可见,环境与COM线程模型中的套间(apartment)非常类似,套间是线程模
型的基本单元,环境则是列集机制的基本边界。跨环境的调用必须经过代理和存根代码,但
并不意味着需进行线程切换,这是与套间的重要区别。影响跨套间调用性能在于线程切换,
而不是参数列集和散集处理,因此跨环境调用比跨套间调用的效率可能要高得多。
COM+最具特色的系统服务有的从MTS继承过来,如事务、对象池、安全模型以及管理
特性,有的是新增加的,如队列组件、负载平衡、内存数据库和事件服务。COM+以系统服
务的形式提供应用有多方面的好处,其一,客户或者组件程序直接利用系统服务,避免底层
细节处理,减少开发成本,降低编码量;其二,有些系统服务涉及到较复杂的逻辑,如需进
行底层系统资源的访问,应用层较难实现;其三,使用系统服务可增强可靠性。
参考文献
[1]刘江宁,等.几种构件模型的比较分析[N].计算机世界,1999,15.
[2]赵颖,等.一种CORBA/DCOM互连网关的设计[J].计算机系统应用,1998,(8).
[3]黎连业,刘占全.微软SQLServer7.0数据仓库框架(二)[J].网络世界,1999,14.
[4]王千祥.软件构件实现规范及标准[N].计算机世界,1999,9.
[5]潘爱民.组件技术——COM+[J].微电脑世界,1999,(25-29).


发布评论