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. debian系统,启动Wireshark,出现Couldn't run /usr/bin/dumpcap in child process:权限不够

    这是由于当前用户没有权限运行/usr/bin/dumpcap造成的./usr/bin/dumpcap是Wireshark的包捕获引擎. 先用ls命令看一下dumpcap的权限情况:xy@debian- ...

  2. HTML5之拖拽

    HTML5拖放 拖放(Drag和drop)是H5标准的组成部分 此处需具备js基础知识及其H5拖拽部分相关方法 在拖动目标上触发事件 (源元素): ondragstart - 用户开始拖动元素时触发 ...

  3. Zookeeper -- 命令

    zkServer.sh start //启动zk进程 zkServer.sh stop //关闭zk进程 zkServer.sh status //查看zk状态 zkCli.sh //启动本地zk客户 ...

  4. 解决Stm32出现error: #20: identifier "GPIO_InitTypeDef" is undefined异常

    该错误是我在移植sd卡程序时出现的,错误如下: error:#20,查看错误,可以发现,这些变量都是系统定义过的,没有修改过.并且该变量也能成功跳转被找到.那么到底是什么原因呢?逛了一些帖子,尝试了好 ...

  5. 生产环境rails console spring自动启动的问题

    在生产环境执行rails console没反应无法进入控制台,或者执行rails console的时候spring自动启动,导致所有的类名都无法识别,报错:NameError: uninitializ ...

  6. 20155235 2016-2017-2 《Java程序设计》第4周学习总结

    20155235 2016-2017-2 <Java程序设计>第4周学习总结 教材学习内容总结 第六章知识点: 何为继承 继承共同行为 多态与is-a 重新定义行为 抽象方法.抽象类 继承 ...

  7. Android开发——你真的了解Dialog、Toast和Snackbar吗

    0. 前言 今天给大家带来一篇简单易懂的关于Android提醒小功能的文章.Dialog和Toast我们都不陌生,而Snackbar是Design Support库中提供的新控件,有些朋友可能还不了解 ...

  8. [agc006F]Blackout

    Description 传送门 Solution 这道题的操作是真的得服气..感谢各位大佬的指导. 首先我们看看答案的最大值:1010.哦不,这不可能存在,我们肯定不可能一轮轮枚举点进行扩展的. 所以 ...

  9. 优步uber司机常见问题与答案(成都地区官方)

    成都地区优步司机常见问题,官方内容,有点多,常出现的问题都收录在这里了,大家可以看看.(注:文章转自官方,非原创) 以下为成都优步合作车主最常见的问题列表和答案.对于绝大多数的车主端问题,您都可以在下 ...

  10. tkinter界面卡死的解决办法

    0.如果点击按钮,运行了一个比较耗时的操作,那么界面会卡死 import tkinter as tk import time def onclick(text, i): time.sleep(3) t ...