2023年11月30日发(作者:)

组件技术

COM/DCOM/COM+COM/DCOM/COM+组件技术

2010-09-1610:03:38|分类:计算机|标签:com组件dcom对象调用|字号订阅

要:针对分布、异构的计算环境要求,应用系统的开发遇到了严峻的挑战。本文较

为详细地介绍了微软组件技术的发展过程及相应技术特点,特别是最新的COM+组件技术

引入,对今后应用系统的开发可产生不可估量的效益。

关键词:COMDCOMCOM+;组件

组件是独立于特定的程序设计语言和应用系统、可重用和自包含的软件成分。组件是基

于面向对象的,支持托放(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接口包括

QueryInterfaceAddRefRelease

COM对象:即CoClass实例,提供接口的具体服务。CoClass是一个或多个COM

口的实现。对COM对象的调用是通过一个指向其接口的指针实现的。

COM服务器:是一个程序或库,包含COM对象,向客户提供服务。

类工厂(ClassFactory:用于创建、注册COM对象的特殊对象,为实例化CoClass

提供一种标准机制。对CoClass进行实例化是通过调用全局WindowsAPI函数

CoGetClassObjectCoCreateInstance实现的。

类型库(TypeLibrary:一个二进制资源文件,包含COM服务器中对象与接口的类型

信息,可以从MIDLODL转换而来。

Automation服务器扩展:Automation代表一个应用程序控制另一个应用程序中对象的

能力。Automation服务器是指实现IDispatch接口的对象,IDispatchIUnkown的基础上

增加了GetIDsOfNamesGetTypeInfoGetTypeInfoCount以及Invoke接口。

COM应用有如下特点:丰富的综合服务,包括事务、安全性、消息队列和数据存取,

以支持最广泛的应用;组件间通过基于指针的API调用实现互操作,调用透明性好;对

Windows依赖性强,其他操作系统的支持相对不足;供货商可使用多种开发语言开发,如

VCVBC++Builder等;定制应用软件和可重用组件的广泛用户基础;可靠的重用性,

充分利用用户和开发人员的现有投资[3

13DCOM4COM+

COM系统中,客户对组件对象功能的调用接口一般采用COMIDL来描述。COM

义了两类服务器,进程内服务器(In-process)和进程外服务器(Outofprocess。进程内

服务器即本地机上的DLL进程外服务器分为两类,一是本地机上的EXE可执行程序,二是

远程机上的DLLEXE程序。服务器内部包括组件接口的实现体(InterfaceImplement)和类

工厂(ClassFactory,类工厂生产组件对象,将对象的接口指针返回给客户。组件服务器的

定位由COM库完成并返回对象指针。COM对象位置的透明性处理由COM的服务控制机制

保证。进程外的对象必须先调用服务控制机制提供的代理,代理生成服务对象的远程过程调

RPCRemoteProcessCall2。基于COM的系统调用原理如图1所示。

DCOM是微软与其他业界厂商合作提出的一种分布组件对象模型,它是COM在分布计

算方面的自然延续,为分布在网络不同节点的两个COM组件提供了互操作的基础结构。

DCOM增强COM的分布处理性能,支持多种通信协议,加强组件通信的安全保障,把基于

认证Internet安全机制同基于WindowsNTC2级安全机制集成在一起。但从系统内部的实

现机制而言,DCOM所采用的技术仍符合图1所示的COM模式。

DCOM自动建立连接、传输信息并返回来自远程组件的答复。DCOM在组件中的作用有

PC机间通信的PCIISA总线,负责各种组件之间的信息传递,如果没有DCOM,则达

不到分布计算环境的要求。微软通过纳入事务处理服务、更容易的编程以及对Unix和其它平

台的支持扩充了DCOM

建立DCOM时和使用COM建立对象的方式是相同的,只需再加入一个机器名称的参数。

如果COM通过WindowsAPICoGetClassObject建立对象,只需再输入机器名称的参数

即可在远程指定的计算机中建立对象,并且取得指定接口的信息。它构造于RPC的技术之上,

并且使用TCP/IP作为网络通信协议。

COM+5]倡导一种新的设计概念,把COM组件提升到应用层,把底层细节留给操作

系统,使COM+与操作系统的结合更加紧密。COM+的底层结构仍然以COM为基础,但在

应用方式上则更多地继承了MTSMicrosoftTransactionServer)的处理机制,包括MTS

的对象环境、安全模型、配置管理等。COM+COMDCOMMTS三者有机地统一起来,

同时也新增了一些服务,如负载平衡、内存数据库、事件模型、队列服务等,形成一个概念

新、功能强的组件体系结构,使得COM+形成真正适合于企业应用的组件技术。几者之间的

结构关系如图2所示。

微软在MTS的基础上提出了多层软件结构的概念,如图3a)所示。为实现多层结构

的企业应用,须使用各种分离技术,开发人员费时费力。图3b)则是微软正在实现的三层

结构模型,DNA结构中,客户层FORMS+还只是一个技术框架,它把Win32GUIWeb

API结合起来,并朝着DHTML的方向发展,数据层STORAGE+还只是一种提法,不过微软

已经把数据库接口从ODBC转移到ADOOLEDB上,这将最终促进数据层接口技术的统

一。中间业务层COM+以系统服务的形式把原先散落的一些技术综合起来,并提供简单的编

程模型,以直接应用层的编程接口为应用程序提供服务。COM+DNA结构的核心,它将成

为企业应用或者分布式应用的基本工具。

2

3

COM+组件建立在COM+系统服务基础上,可避免底层繁琐的细节处理,既保证应用程

序的可靠性,又使其更趋于标准化。COM+组件提供可管理、可配置的特性,在创建COM+

对象时通过截取(intercept)技术为其分配一个环境对象(Context,利用对象环境的

IObjectContextInfo接口可以访问到环境的属性信息。下面对截取概念的步骤作以说明:

组件对象通过说明性属性指定一些基本要求;

客户端调用CoCreateInstance函数时,COM+系统检查客户代码是否运行在与对象类兼

容的对象环境中;

如果客户代码运行环境与对象类所要求的兼容,不使用截取技术,直接创建对象并返回

对象的接口引用。否则CoCreateInstance函数切换到一个与对象类兼容的环境中,然后创建

对象并返回一个代理对象;

在以后的接口方法调用中,代理对象在调用前后作一些处理,以便方法的运行环境能满

足要求。

COM+的对象引用即对象接口指针与环境相关,不能简单地把对象引用从一个环境传递

到另一个环境。当客户从一个环境调用到另一个环境中的对象时,中间必须经过代理对象和

存根代码,由代理对象截取调用,负责进行环境切换,保证客户代码和对象分别在自己的环

境中执行。类似于COM的跨进程列集(marshaling)和散集(unmarshaling)处理,即调

CoMarshalInterfaceCoUnmarshalInterface函数,对于支持事务特性、安全特性或其

他特殊要求的应用较为重要。跨环境调用过程如图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).