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.一个代理进程可以同时为多个客户提供服务。

DCOM初步窥探二的更多相关文章

  1. dcom初步窥探一

    一.问题带入: 从delphi 5开始,有许多人都面临过这样的问题:com应用开发出来并且在本机上运行一切正常,但是一旦分发出去实施远程访问时,就无法正常运行了.我自己有段时间在看到“拒绝访问”错误提 ...

  2. [入门级] 基于 visual studio 2010 mvc4 的图书管理系统开发初步 (二)

    [入门级] 基于 visual studio 2010 mvc4 的图书管理系统开发初步 (二) Date  周六 10 一月 2015 By 钟谢伟 Category website develop ...

  3. Cardboard虚拟现实开发初步(二)

    Google Cardboard 虚拟现实眼镜开发初步(二) Cardboard SDK for Unity的使用 上一篇文章作为系列的开篇,主要是讲了一些虚拟现实的技术和原理,本篇就会带领大家去看一 ...

  4. 初步窥探Git

    码农之路恒久远,学习向上是真谛啊!在学习的过程中,相信大家或多或少都接触到Git这个东东.它到底是什么呢,有什么作用呢,为什么它会那么火呢?带着这些一连串的疑问,决心去揭开它的庐山真面目. 在软件开发 ...

  5. Jmeter初步使用二--使用jmeter做一个简单的性能测试

    经过上一次的初步使用,我们懂得了Jmeter的安装与初步使用的方法.现在,我们使用Jmeter做一个简单的性能测试.该次测试,提交的参数不做参数化处理,Jmeter各元件使用将在介绍在下一博文开始介绍 ...

  6. requireJS的初步掌握(二)

    前面我们讲述了requireJS的一些认知和优点,==>http://www.cnblogs.com/wymbk/p/6366113.html 这章我们主要描述的是requireJS的一些常用的 ...

  7. redis 初步认识二(c#调用redis)

    前置:服务器安装redis 1.引用redis 2.使用redis(c#) 一 引用redis  (nuget   搜索:CSRedisCore) 二 使用redis(c#) using System ...

  8. gdb初步窥探

    本文是通过学习左耳朵皓帝的文章,详见:http://blog.csdn.net/haoel 1.使用gdb gdb主要是用来调试c和c++程序,首先在编译前我们先把调试信息加到可执行程序当中,使用参数 ...

  9. gcc初步窥探

    由于没有上过Linux编程这门课,所以Linux学得很水啊!!用来用去都是ls -al ; cd .. ;这些渣命令,尤其gcc都不知道什么东西来的,所以先学一下吧. 一.程序的编译过程 对于GUN编 ...

随机推荐

  1. 在js中获取页面元素的属性值时,弱类型导致的诡异事件踩坑记录,

    前几天写一个js的时候遇到一个非常诡异的事情,这个问题是这样的,我要获取一个页面的DOM元素的val值,判断这个值是否比某个变量大,这个需求原先数字最大也就是10,现在要改了,可能会更多,这个时候我发 ...

  2. MongoDB基础教程

    MongoDB 一.下载MongoDB数据库 1.进入MongoDB官网进行下载,网址:https://www.mongodb.com/. 2.下载完成后可进行安装,安装后,并有了MongoDB服务. ...

  3. 每日Linux命令(2)-cal

    cal命令用来显示公历,公历是现在国际通用的历法. 一.格式 cal [选项] [参数] 二.功能 显示当前日历年月日,也可以指定显示某年全年日历及时间. 三.命令选项 -h 关闭今天显示的高亮 -j ...

  4. Verilog的一些系统任务(二)

    $monitor 任务$monitor提供了监控和输出参数列表中的表达式或变量值的功能. 格式: $monitor(p1,p2,...,pn);   $monitor;        $monitor ...

  5. 柴柴随笔第三篇:安装虚拟机以及Linux基础入门

    虚拟机的安装 老师提供的作业指南给了我莫大的帮助,一步一步按着其中操作提示和网址链接,我首先下好了VM,也创建好了自己的第一台虚拟机. 接着按照步骤安装了Ubuntu到我的虚拟机. 到此,一切都顺风顺 ...

  6. 20145234黄斐《Java程序设计》第九周

    教材学习内容总结 整合数据库 JDBC入门 JDBC是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数据库厂商则对接口进行操作,开发人员无须接触底层数据库驱动程序的差异性,数据库本身是个独 ...

  7. underscore.js 源码分析5 基础函数和each函数的使用

    isArrayLike 检测是数组对象还是纯数组 var property = function(key) { return function(obj) { return obj == null ? ...

  8. Drupal7 配置多站点及为每个站点设置语言

    默认情况 在Drupal7的安装目录下存在sites目录 sites目录结构如下: --all --default --example.sites.php --README.txt 1. 添加新域名, ...

  9. vmware因为软件出过一次复制的错误导致不能复制到主机的解决方法

    只需要把vmware的虚拟机进程全部结束掉,然后重置(先设置不勾选复制等,然后保存后在勾选上并保存)一次虚拟机隔离设置(需要在关闭虚拟机的情况下设置,否则就是灰色不允许操作),然后再开启虚拟机,就能正 ...

  10. MAVEN相关文章

    Maven入门指南① :Maven 快速入门及简单使用 Maven入门指南② :Maven 常用命令,手动创建第一个 Maven 项目 Maven入门指南③:坐标和依赖 Maven入门指南④:仓库 M ...