COM原理及应用----分布式COM(DCOM)

1、DCOM

COM的进程透明特性表现在组件对象和客户程序即可以拥有各自的进程空间,也可以共享同一个进程空间,COM负责把客户的调用正确传到组件对象中,并保证参数传递的正确性。组件对象和客户代码不必考虑调用传递的细节,只要按照一般的函数调用的方式实现即可。如果进一步拓展进程透明特性,考虑组件对象与客户程序运行在不同计算机上的情形,把进程透明性拓展为位置透明性,形成分布式组件对象模型,简称为DCOM。

DCOM是COM的扩展,它可以支持不同计算机上组件对象与客户程序之间或者组件对象之间的相互通信,这些计算机可以在局域网内、广域网上、 Internet上。对于客户程序而言,组件程序所处的位置是透明的,我们不必编写任何处理远程调用的代码,因此,DCOM也是COM的无缝扩展。 DCOM处理了底层网络协议的所有细节。

2、从COM转向DCOM

进程内组件与客户程序之间的通信过程比较简单。本地进程外组件与客户程序之间的通信并不是直接进行的,而是用到了操作系统支持的一些跨进程通信方法。

DCOM只是简单地把本地跨进程通信用一个网络协议传输过程来代替,只是中间数据传递的路线更长一些。当然,网络通信比单机系统环境下的跨进程通信要脆弱得多,所以为了保证协作过程的可靠性以及程序对异常事件的应变能力,客户程序和组件程序需要考虑更多的细节。

3、DCOM对象的定位

客户程序调用COM库的基础创建函数(比如CoGetClassObject)创建远程组件对象需要知道远程机器名和对象CLSID。

有两种方法可以得到远程对象的机器名信息:一是在创建函数的参数中指定COSERVERINFO结构,二是使用DCOM配置工具指定远程机器名。

COM库的创建函数得到了远程对象的位置信息后,再把对象创建的任务交给SCM,由SCM通过RPC与远程机器进行通信。SCM(程序名为 Rpcss.exe)也是COM库的一部分,但它是一个单独的进程。SCM负责创建新的COM对象,也负责建立组件对象与客户程序之间的连接。如果要创建远程对象,它会通过RPC调用远程机器上的SCM,由远程机器上的SCM启动组件进程,并创建组件对象,然后返回到客户机器。

当然,远程组件对象被创建之后,它在返回到客户机器的途中,还要经过列集和散集的处理,包括创建代理对象和装载存根代码等,这些处理与本地进程外组件对象的处理完全一致。一旦组件对象被创建完成之后,客户与组件之间的通信不再经过SCM,而是直接通过代理对象和存根对象以及COM库提供的底层传输机制来完成。

4、列集与散集

列集与散集是实现COM组件对象跨进程特性的关键技术,它包括标准列集法和自定义列集法。同样的技术也适用于DCOM组件对象与客户程序之间的通信,两者的区别在于列集数据包的传递方式有所不同,对于本地组件对象使用LPC传递,而对于DCOM组件对象使用RPC传递。

DCOM提供了一套复杂的列集和散集机制,它建立在RPC的基础上。由于RPC被定义为DCE(分布式计算系统)标准的一部分,而DCE RPC定义了所有常用数据类型的数据表达方式,即网络数据表示法(NDR,network data representation)。为了使存根代码和代理对象能够正确地对参数和返回结果进行列集和散集,它们应该使用一致的数据表示法NDR,以便在不同的操作系统环境下也能够远程调用。

5、对象RPC

DCOM协议也被称为对象RPC(ORPC,object remote procedure call ),它建立在DCE RPC协议的基础上,可用于各种基于组件的分布式系统。ORPC建立了一套面向对象的远程调用规范,指定了如何在网络上进行调用、对对象的引用如何表示和如何维护。ORPC协议已经被作为Internet草案递交到IETF(Internet Engineering Task Force , Internet 工程部)。

在Internet或Intranet网络环境下,ORPC仍使用标准的RPC数据包,附加上专用于DCOM的一些信息――接口指针标识符(IPID,interface point identifier)、版本信息和扩展信息――作为调用和返回的附加参数进行传送,其中IPID表示调用被处理的远程机器上特定对象的特定接口。 DCOM客户程序必须周期性地“pinging”远程机器上的对象,以便保证客户与对象一直处于连接状态。

6、DCOM特性

DCOM可以作为分布式应用系统的基本架构,客户程序与DCOM组件对象之间形成了客户/服务器关系,进一步可构成多层软件模型。DCOM组件具有COM 组件的一些基本特性,包括重用性、语言无关性等。而位置透明性 是DCOM的一个基本特性。DCOM的其他特性如下:

(1)可伸缩性。一方面,DCOM利用操作系统本身的可伸缩性;另一方面,DCOM提供了灵活的配置方案,允许不同的组件对象允许在不同的服务器上,DCOM的位置透明性保证了这种变化可以不必修改组件源程序。

(2)可配置性。安装和管理是分布式软件系统的两个重要环节。DCOM提供了一个图形界面的配置工具程序(DCOMCNFG.EXE),可使客户程序和组件程序在不改变代码的情况下适应不同的网络环境。

(3)安全性。DCOM使用了Windows NT提供的可扩展安全性框架,在非NT平台上实现的DCOM也包括了一个与NT兼容的安全提供器。DCOM实现的安全性分为访问安全性和激活安全性,访问安全性指定那些用户可以调用组件对象,激发安全性指定哪些用户可以在一个新进程中创建新的对象。

(4)协议无关性。

(5)平台独立性

时间: 2024-09-12 20:44:57

COM原理及应用----分布式COM(DCOM)的相关文章

以fourinone为例详细解析分布式协调的设计原理

fourinone 实际上可以单独当做 Zookeeper 用,它使用最少的代码实现了 Zookeeper 的所有功能,并且力图做到功能更强但是使用更简洁.本文以 fourinone 为例详细解析了分布式协调的设计原理. Fourinone(中文名字"四不像")是一个四合一分布式计算框架,在写这个框架之前,我对分布式计算进行了长时间的思考,也看了老外写的其他开源框架.当我们把复杂的 Hadoop 当作一门学科学习时,似乎忘记了我们想解决问题的初衷:我们仅仅是想写个程序把几台甚至更多的机

分布式核心技术之协调设计解析

Fourinone 简介 Fourinone(中文名字"四不像")是一个四合一分布式计算框架,在写这个框架之前,我对分 布式计算进行了长时间的思考,也看了老外写的其他开源框架.当我们把复杂的 Hadoop 当作一门学科学习时,似乎忘记了 我们想解决问题的初衷:我们仅仅是想写个程序把几台甚至更多的机器一起用起来计算,把更多的 CPU 和内存利用上,来 解决我们数量大和计算复杂的问题.当然这个过程中要考虑到分布式的协同和故障处理.如果仅仅是为了实现这个简单的初 衷,为什么一切会那么复杂.我

WCF分布式开发必备知识(2):.Net Remoting

上一节我们学习了网络分布式编程中的MSMQ消息队列技术.本节我们将学习分布式编程的另外一个重要的技术.Net Remoting,文章的结构还是先讨论基本概念,再来探讨具体的技术实现,希望能和大家一起交流学习. .Net Remoting技术,我们可以将其看作是一种分布式处理方式.作为应用程序之间通信的一种机制,.Net Remoting与MSMQ消息队列不同,它不支持离线脱机消息,另外只适合.Net平台间程序的通信.从微软的产品角度来看,可以说Remoting就是分布式组件DCOM的一种升级,它

Moosefs分布式文件系统集群讲解配置

MFS的官方网站为http://www.moosefs.org ,详细信息您可以去官网进行更多的了解,在这里我只将简单的知识和大家分享. MFS的网络组成有三部分,Master Server;Chunk Server;Client.其中Chunk Server和Client可以有多个,而Master主控端只能一个. MFS文件系统结构: 1 管理服务器(master-server):负责各个数据存储服务器的管理,文件读写调度,文件空间回收以及恢复.多节点拷贝 2 元数据日志服务器(changel

Java中JDBC事务与JTA分布式事务总结与区别_java

Java事务的类型有三种:JDBC事务.JTA(Java Transaction API)事务.容器事务.常见的容器事务如Spring事务,容器事务主要是J2EE应用服务器提供的,容器事务大多是基于JTA完成,这是一个基于JNDI的,相当复杂的API实现.所以本文暂不讨论容器事务.本文主要介绍J2EE开发中两个比较基本的事务:JDBC事务和JTA事务. JDBC事务 JDBC的一切行为包括事务是基于一个Connection的,在JDBC中是通过Connection对象进行事务管理.在JDBC中,

浅谈JS DDoS攻击原理与防御

浅谈JS DDoS攻击原理与防御 分布式拒绝服务攻击(DDoS)攻击是一种针对网站发起的最古老最普遍的攻击.Nick Sullivan是网站加速和安全服务提供商CloudFlare的一名系统工程师.近日,他撰文介绍了攻击者如何利用恶意网站.服务器劫持和中间人攻击发起DDoS攻击,并说明了如何使用HTTPS以及即将到来的名为"子资源一致性(Subresource Integrity,简称SRI)"的Web新技术保护网站免受攻击. 现代网站的大部分交互都来自于JavaScript.网站通过

简述fourinone是如何进行分布式协调设计的

分布式协同在分布式应用中可谓是必不可少的,担任着协调者的角色,也就是将多机协同的职责从分布式应用中独立出来,这样就能减少系统的耦合性和增强扩充性.Apache的Zookeeper, google的Chubby都是分布式协同的实现者.fourinone实际上是Zookeeper的升级版,它通过使用最少的代码实现了Zookeeper的所有功能,并且力图做到使用更简洁,功能更强的应用. 一.实现原理 fourinone对分布式协同的实现, 是通过建立一个domain,node两层结构的节点信息去完成,

深入理解Java事务的原理与应用_C 语言

一.什么是JAVA事务 通常的观念认为,事务仅与数据库相关. 事务必须服从ISO/IEC所制定的ACID原则.ACID是原子性(atomicity).一致性(consistency).隔离性 (isolation)和持久性(durability)的缩写.事务的原子性表示事务执行过程中的任何失败都将导致事务所做的任何修改失效.一致性表示 当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态.隔离性表示在事务执行过程中对数据的修改,在事务提交之前对其他事务不可见.持 久性表示已提交的

【集锦】2016年阿里云在线直播精华合集

每期阿里云的技术分享课程都报名火爆,各路技术大咖进行了对于技术理解的深度分享,但是还是有很多小伙伴错过了现场直播.本文特意为大家整理了阿里云在线技术分享课程的精彩合集,错过了直播的小伙伴们快来补补课吧! 12月28日 阿里沈询:分布式事务原理与实践 分布式数据库之中,一个最重要待解决的问题就是分布式事务应该怎么支持.往往一提到分布式事务,就立刻会联想到性能低,速度慢,然而真的是这样么?有没有一些方式和方法,能够比较好的解决这个问题呢?阿里针对这个场景又是怎么去实践的呢?阿里中间件资深技术专家沈询