基于远程通讯的COM与DCOM分布式组件技术分析
2013-03-28傅艳杰
傅艳杰
(中国铁通集团有限公司 通化分公司, 吉林 通化 135100)
近年来以建立在ActiveX、OLE的基础之上的组件对象模型COM(Component Object Model)与分布式组件对象模型DCOM(Distributed Component Object Model)之上的分布式组件技术,能够较好地在Internet平台及其分布式结构下解决这类问题。有关COM、改进COM+以及DCOM的跟踪研究文献有许多报道,如COM、改进COM+的高级编程应用[1]以及分布式数据库的一般应用[2]、异构分布式数据库的互操作技术[3]、多数据库系统的集成或联合[4-5]、分布式随机库存的管理等[6],但对于远程通讯中的客户端请求和服务器组件对象的相互通讯仍缺乏具体的实例。
基于此,本文对远程通讯分布式计算过程中的COM与DCOM分布式组件的实现过程进行分析与研究。由于COM与DCOM分布式组件具有与语言无关、进程透明、可重用的一系列组件程序共同规范,使得在分布式计算的应用场合日益得到推广。基于通讯增值业务的技术角度而言,当硬件条件基本不变的情况下,COM与DCOM分布式组件技术就有了高度的研究空间,可以视为解决远程通讯分布式计算的关键问题。
1 COM与DCOM分布式组件的技术分析
在技术的时序上,作为分布式组件技术的前沿DCOM是奠基于COM及COM+规范,特别是COM接口及COM接口的继承、组件的客户程序、组件与组件之间及组件与客户之间的接口交互、抽象基类、实现类等诸多关键内容,这些内容均为当前颇为关键的DCOM分布式组件计算问题。而在技术的继承上,COM与DCOM分布式组件是配合于结构中每个节点之上,包括前身的WINDOWS API(Application Programming Interface)接口与ActiveX控件技术,它们共同支撑着分布式计算以及并行计算的实现过程。
1.1 WINDOWS API组件程序的平面式交互结构
与分布式的COM组件技术相对应的是此前应用较为广泛的WINDOWS API接口技术,后者是一种平面式的交互结构。在32位面向对象语言环境中,自动化(Automation)、ActiveX控制以及封装后控件的能力体现了语言的效率,像VC、VB、VFP等都可以在工程中使用Microsoft提供的控件,也可以在工程中引入来自第三方的控件,均可以ActiveX或动态链接库DLL的形式加以体现。但由于自动化(Automation)、ActiveX控制等掩盖了组件的底层结构,软件人员很能控制组件的行为,在组件重用及程序交互等方面带来了一系列的问题,这此问题使得WINDOWS API组件程序的平面式交互结构难以扩展,至少在项目开发的速度以及技术的延展上无法令人满意。
1.2 API接口函数庞杂导致组件难以充分应用
在远程通讯分布式环境下,接口函数的庞杂性极大地限制了组件的易用性,包括前身的WINDOWS API接口与ActiveX控件技术均如此。对多个32位应用程序而言,根据需要可能访问WINDOWS操作系统的底层技术,如驱动硬件、WINDOWS消息机制等,此时,有可能要共用到一个组件,常规的做法是通过Microsoft提供的动态链接库DLL中的WINDOWS API接口函数来实现,即以WINDOWS API作为组件接口。但由于Microsoft提供的WINDOWS API接口函数共达300多个,即使一般硬件厂商提供的作为二次开发的接口软件包SDK也至少包含数十个函数,编程的接口面比较宽,开发人员掌握和使用起来都比较困难。
1.3 应用程序交互极大受限于API接口规范
WINDOWS API接口规范受语言环境的限制较多,不利于远程通讯中的应用程序交互。由于不同的32位面向对象语言对WINDOWS API接口函数的调用形式是不同的,如在VC、VB、VFP语言环境中,调用同一个动态链接库DLL中的WINDOWS API接口函数,参数的传递顺序、参数类型、函数返回值及调用的形式都有所不同。如果不同的应用系统采用了不同的开发语言,则应用程序之间的相互通讯将成为技术障碍,导致若干独立的应用系统成为“信息孤岛”,使得远程通讯分布式计算过程中的信息融合变得十分困难。
1.4 ActiveX的封装掩盖了底层结构
在WINDOWS API组件程序的平面式交互结构中,出于技术考虑而多采用封装控件的形式,如ActiveX控件等皆以此技术对底层结构进行掩盖。除却技术保护而言,ActiveX控制掩盖了底层结构不利于在远程通讯分布式计算中具体应用。因为在远程通讯分布式实际应用中,不仅限于对组件的使用,软件人员需要掌握组件的底层知识,一旦组件发生了底层错误,软件人员需要对组件的行为进行分析,以查找错误予以修正。但类似ActiveX控制的形式,在一定程度上限制了这种可能。
总体而言,平面式结构的WINDOWS API接口是定义在源代码级,而COM接口是定义在二进制级,所表现出来的性能差异很大,它可以从VC、VB、VFP的开发环境迁移到VC#开发平台而获得直观验证。
2 COM与DCOM分布式组件应用的技术优势
由Microsoft提出的基于WINDOWS平台上的组件对象模型COM与分布式组件对象模型DCOM,与OMG提出的基于UNIX平台上的公共对象请求中介体系结构(Common Object Request Breaker Architecture)相类似,它规定了组件程序的共同规范以及组件程序之间进行交互的共同标准。
COM与DCOM分布式组件技术建立在ActiveX、OLE的基础之上,其基本思想是将大而复杂的软件应用分成一系列的可先行实现、易于开发、理解和调整的软件单元,也就是通常定义的组件。以COM与DCOM分布式组件为基础的软件解决方案,不仅效率高、花费低,而且有利于在计算机业、通讯业形成软件开发的规模效益,特别适于开发分布式计算软件系统。
应用COM与DCOM分布式组件与简单地应用WINDOWS API编程不同,它可以在分布式计算的开发上具有较大的技术优势,在分布式计算过程中至少表现为下列几个方面:
一是COM与DCOM组件缩短了开发时间。编程人员可将先行开发的许多部件装配到新的程序中,显著加快新程序的开发速度。
二是降低了集成费用。在将COM与DCOM组件集成为一个完整的系统方案时,不同的开发商采用了一致的COM标准接口,如此可减少特殊的定制工作。
三是系统开发更具灵活性。开发人员只需简单调整全部应用的一些COM与DCOM组件,即可为不同领域的应用项目提供特定的解决方案。
四是降低了软件维护的费用。在设计分布式计算的过程中,远程通讯是首要考虑的问题,此时各个COM与DCOM组件的软件功能是相对独立的,在维护和升级一个COM与DCOM组件时,不必变动整个应用项目,如此降低了相关的费用,使通讯维护工作变得更为简洁与轻便。此外,COM与DCOM组件的分布性(Distribution)与可重用性(Reusability)的特性也发挥了突出的作用,这种特点使得利用COM与DCOM组件结构开发分布式计算软件时,可以成倍地提高工作的效率,使开发的工期大为缩短。
3 COM与DCOM分布式组件应用的设计实现
从远程客户端来看,COM与DCOM组件的表现形式是以EXE、DLL为扩展名储存的,需要依靠操作系统的调度,才能够以进程内例程或进程外例程的方式加载执行。虽然具体的语言中,也有通过控件的方式出现的,如VB中的OCX、VFP中的VCX等,但依据COM与DCOM的接口规范,组件应与语言无关,故要求组件之间通过接口来互访,接口仅提供参数、返回值等信息供组件调用,即组件的设计过程应跨越语言平台。
下例是本文采用COM与DCOM接口继承设计的含两个接口fyj1和fyj2的组件fyj。
// 自编接口fyj1
interface fyj1
{ virtual void _stdcall HN1() = 0;
virtual void _stdcall HN2() = 0;
};
//自编接口fyj 2
interface fyj2
{ virtual void _stdcall HN3() = 0;
virtual void _stdcall HN4() = 0;
};
// 实现类--组件fyj
class fyj
{ public:
……
};
由于COM与DCOM是基于客户和服务器模型的,客户端和服务器组件对象的交流是通过COM与DCOM组件技术加以实现的,客户端仅是建立对象的实例,而服务器端才是负责接收和处理来自客户的各种请求的对象,故构造COM与DCOM分布式组件fyj之后,即可交由客户建立使用对象的实例,以在远程通讯分布式环境中加以具体引用,而不必考虑何种具体的开发语言。
4 结束语
远程通讯中的分布式计算环境相当于DCOM、COM及COM+之上添加了网络协议,使得COM对象可在远程计算机上运行,运行环境会自动确认是否允许访问远程对象。用户的感觉是COM对象的运行如同发生于本地机一样,而运行的性能取决于网络环境。特别是基于并发及CPU多线程技术的支持,COM与DCOM分布式组件的应用都为分布式计算及并行计算提供了良好的技术解决方案,使敏捷开发更加广泛地出现于计算机通讯。
[参考文献]
[1] Randy Abernethy.COM与DCOM技术内幕[M].北京:电子工业出版社,2000.
[2] 董少英.基于COM/DCOM的分布式数据库系统的研究[J].信息与电脑,2011(6):155-156.
[3] 吴超.基于COM/DCOM的异构分布式数据互操作技术研究[D].西安:西北工业大学硕士学位论文,2003.
[4] 陶昕,谢昕.基于COM/DCOM集成的多数据库系统的研究与实现[J].微计算机信息,2011(6):206-207.
[5] 施媛波.基于COM的多数据库联合系统的设计和实现[J].煤炭技术,2011(3):165-166.
[6] 沈晟,沈炳炎.基于DCOM/COM+的分布式随机库存管理系统应用研究[J].计算机工程与设计,2007,28(12):2951-2956.