1.COM进程透明性表现在“组件对象和客户程序可以拥有各自的空间,也可以共享同一个进程空间”。
COM负责把客户的调用正确传到组件对象中,并保证参数传递的正确性。
组件对象和客户代码不必考虑调用传递的细节,只要按照一般的函数调用的方式实现即可。
如果进一步拓展进程透明性,考虑组件对象与客户程序运行在不同计算机上的情形,把进程透明性拓展为位置透明性,形成分布式组件对象模型,简称DCOM
2.DCOM进一步解释:
DCOM是COM的扩展,它可以支持不同计算机上组件对象与客户程序之间或者组件对象之间的相互通信,
这些计算机可以在局域网内、广域网上、Internet上。
对于客户程序而言,组件程序所处的位置是透明的,我们不必编写任何处理远程调用的代码,因此DCOM是COM的无缝扩展。
DCOM处理了底层网络协议的所有细节。
3.COM和DCOM对比一
客户程序调用COM库的基础创建函数创建远程组件对象需要知道远程机器名和对象CLSID。
有两种方法可以知道远程对象的机器名信息:1.在创建函数的参数中指定COSERVERINFO结构;2,使用DCOM配置工具指定远程机器名。
COM库的创建函数得到了远程对象的位置信息后,再把对象创建的任务交给SCM(程序名为Rpcss.exe,也是COM库的一部分,但它是一个单独的进程),由SCM通过RPC与远程机器进行通信。如果创建远程对象,它会通过RPC调用远程机器上的SCM,由远程机器上的SCM启动组件进程,并创建组件对象,然后返回到客户机器。
在远程组件对象被创建后返回到客户机器的途中,还要经过列集和散集(下面介绍)的处理,包括创建代理对象和装载存根代码等,这些处理与本地进程外组件对象的处理完全一致。一旦组件对象被创建完成之后,客户与组件之间的通信不再经过SCM,而是直接通过代理对象和存根对象以及COM库提供的底层传输机制来完成。
4.列集和散集
包括标准列集法和自定义列集法。同样的技术也适用于DCOM组件对象与客户进程之间的通信。
两者的区别在于列集数据包的传递方式有所不同,对于本地组件对象使用LPC传递,而对于DCOM组件对象使用RPC传递。
DCOM提供了一套复杂的列集和散集机制,它建立在RPC的基础上。
5.对象RPC
DCOM协议也被称为对象RPC,它建立在DCE RPC协议的基础上。可用于各种基于组件的分布式系统。
6.DCOM特性
DCOM可以作为分布式应用系统的基本架构。客户程序和DCOM组件对象之间形成了客户/服务器关系。
DCOM组件具有COM组件的一些基本特性,包括重用性、语言无关性等。而位置透明性是DCOM的一个基本特性。
DCOM其他特性:
1.可伸缩性。一方面,DCOM利用操作系统本身的可伸缩性;另一方面DCOM提供了灵活的配置方案,允许不同的组件对象允许在不同的服务器上。DCOM位置透明性保证了这种变化可以不必修改组件远程序。
2.可配置性。DCOM提供了一个图形界面的配置工具程序(DCOMCNFG.EXE)
3.安全性。
4.协议无关性。
5.平*立性。
7.对象激活
激活一个组件对象包括两种情形:1.创建新的组件对象。2.建立已有组件对象与客户之间的连接。
COM扩展到DCOM之后,远程对象的创建过程有所不同。为了标识一个远程对象,仅仅提供一个128为的GUID还不够,还必须得知道所在的机器名,也被称为远程服务器名“RemoteServerName”。
1.创建DCOM组件方法一:
通过DCOM配置工具指定远程服务器名。在Windows系统平台上,远程服务器名字值被保存在系统注册表HKEY_CLASSES_ROOT\APPID键下。
2.创建DCOM组件方法二:
用第一种方法并不是总能满足应用的要求,例如要求在程序运行过程中控制要连接的服务器,多人游戏程序、网络远程管理工具等。
对于这样的应用,DCOM允许在创建函数中指定远程服务器名字。可以指定远程服务器名字的创建函数:CoCreateInstanceEx、 CoGetClassObject、CoGetInstanceFromFile、CoGetInstanceFromeIStorage。
在程序中指定服务器名字的另外一个功能是实现分布式应用系统的动态负载平衡。
8.代理进程
为了远程运行进程内组件即DLL组件,要求在远程机器上有代理进程。
特性:
1.进程组件程序中的严重错误只影响代理进程,不会使客户程序崩溃。
2.一个代理进程可以同时为多个客户提供服务。