COM用来帮助匹配客户机与服务器的主要机制是Windows Registry。COM使用注册表来跟踪哪个组件已经被安装到系统中了,注册表中记录的信息包括:哪些组件对客户有效,服务器的DLL,可执行代码的精确位置,以及在应用程序运行过程中COM所需要的大量细节信息。

      这个服务器信息需要放在注册表中的某处。当实现一个服务器时,程序员要保证自己的服务器实现了能够将信息放入注册表中的功能。将信息放入注册表的过程称为服务器注册(server registration)。将信息从注册表中去掉的过程称作服务器解除注册。当服务器及其组件不再使用时,服务器要从系统中删除掉,此时要解除注册。COM服务器的解除注册一般是作为一个应用程序卸载过程中的一部分。

是基于DCOM技术的。与DCOM有关的规范重要有DA,AE,HDA等。

开发DCOM主要有两方面原因:

1、 能够使不同信息格式的文件信息进行交互。

2、 能够实现软件组件之间的二进制兼容。

组件之间的交互是通过查询接口的方法来实现的。一个组件包含了多个封装了访问对象方法的接口。COM主要定义了一下内容:

1、 外部访问二进制COM对象的接口

2、 用来在运行时查询某个对象是否支持特定接口的一整套方法。

3、 对象生命周期的管理机制。通过一个引用指针来实现此目的。当一个接口第一次使用时,该指针增加。当接口释放时,指针减少。当多有接口被释放时,指针为0,这表明这个对象已经不再使用,可以终止自己。

4、 进程间对象的访问规则。因为指向接口和方法参数的指针只能在本进程内有效。

5、 标识和加载对象机制。

通过DCOM,我们可以在以下方面对COM进行如下扩展:

1、 分布式资源

2、 安全

3、 多线程模型

两个重要的问题:

1、 客户端如何获取服务器接口的第一个指针

2、 客户端如何启动服务器

流程:

客户端调用CoGetClassObject()。此函数在ole32 Dll中提供。此函数主要涉及一下参数:

CLSID要启动的服务器的ID。

pServerInfo:服务器信息,这个参数只有在安装DCOM后才能获取,它包括一下信息:

服务所在的远程计算机的名称。

包含认证机制信息的结构体。

IClassFactory接口的唯一标识。

返回的指向IClassFactroy接口指针的内存空间。

注册表入口引用了包含服务的可执行文件。COM 运行时通过这个入口来启动可执行文件。通过CLSID和注册表中的用户口来进行定位。当启动可执行文件后,就会创建一个工厂并且放回指向接口的指针。

此时客户端就可以调用IClassFactory接口的CreateInstance函数来创建服务。这样两个不同的进程就通过启动服务来做更多其它工作。

OPC服务器主要有三种实现方式:

DLL/InProc-Server:

在这种情况下,服务在客户端的进程中。

Local and remote server(OutProc Server):

Opc服务运行在一个单独进程中。当OPC客户端使用时启动。目前大多采用这种方式。

Windows NT Service:

服务通过操作系统自动运行,不用客户端启动。

在分布式情况下,安全性是很重要的。我们必须保证OPC服务器和客户端的交互在期望的组件中进行。

客户端启动远程计算机的进程。它必须通过认证,并能够对该进程进行相应的操作。同时,客户端必须保证服务器端进行合理的操作。

安全需求是双向的。可以通过两种方式来配置安全性。

1、 安全信息都被存储在注册表中。我们可以通过Dcomcnfg来进行管理。这就是声明式方法。

2、 通过引入DCOM,同时提供了一些编程方法来控制安全行为。这就是编程式方法。