什么是分布式组件对象模型 (DCOM)?


DCOM 是组件对象模型 (COM) 的扩展。组件对象模型解释了组件及其客户端如何交互。这种交互方式是客户端和组件能够连接而无需任何中间系统组件。

假设当客户端和组件存在于不同的机器上时,DCOM 会用网络协议替换本地进程间通信。

客户端和组件都不会意识到连接它们的线缆只是变长了一点。

COM 运行时为客户端和组件提供面向对象的的服务,并使用 RPC 和安全提供程序生成符合 DCOM 线路协议标准的标准网络数据包。

上述架构支持软件总线。

为了支持此可重用软件组件,完整的对象模型完全基于面向对象编程模型。

由于其无法提供继承,因此选择使用对象模型,这意味着上述架构成功地避免了存在于不同模型中的脆弱基类综合征。

当一个类继承另一个类的成员和行为时,就会出现脆弱基类综合征。

提供行为和成员函数的类被称为基类,将被识别为派生类。当基类的成员和功能发生修改时,派生类的行为和成员函数也将发生改变。

最终导致必须更改基类,进而需要编译所有依赖类。

DCOM 的工作原理

如果要使 DCOM 工作,首先必须在两台计算机上正确配置 COM 对象,并且可能需要多次卸载和重新安装对象才能使其正常工作。

Windows 在三个标识符中包含 DCOM 配置数据:

  • CLSID - 类标识符 (CLSID) 被称为全局唯一标识符 (GUID),Windows 在其中为程序中安装的每个类存储一个 CLSID。假设您想运行一个类,我们必须使用正确的 CLSID,Windows 就会知道在哪里找到该程序。

  • PROGID - 程序标识符 (PROGID) 是可选标识符之一,程序员可以使用它来替代更复杂和严格的 CLSID。PROGID 更易于阅读和理解。+

  • APPID - 应用程序标识符 (APPID) 用于识别并需要权限才能访问它以及属于同一可执行文件的所有类。假设 APPID 不正确,则 DCOM 将无法工作。根据我的经验,我们需要获取创建远程对象时出现的权限错误。

DCOM 事务

通常,DCOM 事务如下所示:

  • 首先,客户端系统请求远程计算机使用其 CLSID 或 PROGID 创建一个对象。假设客户端传递了 APPID,则远程计算机将使用 PROGID 查找 CLSID。

  • 然后,远程计算机检查 APPID 并验证客户端是否具有创建对象的权限。

  • DCOMLaunch.exe 或 DLLHOST.exe 将创建客户端计算机请求的类的实例。

  • 通信成功!

客户端现在可以访问远程计算机上类中的所有函数。

如果客户端没有正确的权限,或者 CLSID 指向 exe 的旧版本,或者 APPID 未正确配置,或者任何其他问题,我们将收到“无法创建对象”消息。

更新于: 2022 年 3 月 21 日

2K+ 浏览量

开启您的 职业生涯

通过完成课程获得认证

立即开始
广告

© . All rights reserved.