1、DCOM的定义
DCOM(分布式的COM服务器):是指该服务器可以处在网络的别处,并且可通过网络非常简单和透明地激活。
一个进程外的服务器令客户和服务端的区分更明显。该类服务器作为一个独立的可执行(EXE)程序运行,因此处在一个私有的进程空间中。EXE服务器的启动和停止在Windows中服务管理器中进行(SCM)。COM接口的调用通过内部的进程通信技术来处理。服务器可以运行在本地的机器,或者在一个远程的计算机上。如果服务器在一个远程的计算机上,我们称它为“Distributed COM,分布式的COM”,或者DCOM。
2、线程模式
1>、独立线程(apartment-threade):看成的单线程。
在独立线程中,多个服务器客户的方法调用在服务器端的COM对象中被串行化,也就是说,每个独立的方法调用完成后,才会开始下一个的方法调用。因此独立线程的COM对象天生就是线程安全的,
2>、自由线程(free-threaded):看成是多线程。
而自由线程的COM对象可同时在COM对象上有多个的方法调用执行。每个客户的方法调用都在一个不同的线程中运行。因此,在一个自由线程的COM对象中,你必须要注意多线程的问题,例如同步。
开始的时候你将更趋向于使用独立的线程,因为它更加简单,不过以后最好转向到自由线程,因为它有着更多的优点。
3、COM和DCOM的区别和联系
DCOM服务器与COM服务器没有区别,只是位于远程电脑上;
1>、COM/DCOM组件模型是一种平台独立、分布式、面向对象的系统,用于创建可相互作用的二进制软件组件。COM/DCOM是微软的OLE(复合文档)和ActiveX(可用于Internet的组件)以及许多其它技术的基础技术;
2>、COM/DCOM之所以被认为是一种二进制标准,是因为它是一种在应用程序被编译成二进制机器码之后才起作用的标准;
3>、COM/DCOM不是一种面向对象语言,它也不指定一个应用程序如何构造,它是一种标准,它指明一种组件模型和使组件之间能够相互操作的编程需求。COM/DCOM组件可以运行在单一进程、不同进程、甚至是远端机器;
4>、COM/DCOM组件可以通过许多编程语言来创建。许多面向对象语言,诸如C++,都提供可简化COM/DCOM组件实现的编程机制;
5>、COM/DCOM定义了一个COM/DCOM组件的核心实质。一般来说,一个软件组件由一组数据以及管理这些数据的函数构成。一个COM/DCOM组件是这样的一种软件组件,它专门通过一组或多组相关的函数存取组件数据。这些函数集合称为接口,而接口的函数称为方法。对COM/DCOM来说,它需要的唯一的调用接口方法的途径就是指向接口的指针;
6>、编译好的COM/DCOM组件是不能修改的,要增加新的功能只能由开发商对组件源码进行修改、更新,然后重新编译生成新的COM/DCOM组件;
4、DCOM服务器的配置:
DCOM的调用: 必须通过Proxy/Stub对象,并且是通过RPC协议; CoClass的CreateRemote方法(Create调用本地);
Proxy: 远程COM对象在应用程序执行中的影象(Image),封装应用程序的调用信息;
Stub:接受Proxy调用信息,再使用这些信息调用真正的DCOM对象;然后调用结果回传给Proxy,由Proxy回传给应用程序;
RPC(Remote Procedure Call): 通信协议,使用DCOM时必须激活;
SCM(Service control Manager):Windows服务管理器,管理EXE服务器的启动和停止
线程模型: 同COM的模型;独立模式和自由模式