DCOM初步窥探二
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初步窥探二的更多相关文章
- dcom初步窥探一
一.问题带入: 从delphi 5开始,有许多人都面临过这样的问题:com应用开发出来并且在本机上运行一切正常,但是一旦分发出去实施远程访问时,就无法正常运行了.我自己有段时间在看到“拒绝访问”错误提 ...
- [入门级] 基于 visual studio 2010 mvc4 的图书管理系统开发初步 (二)
[入门级] 基于 visual studio 2010 mvc4 的图书管理系统开发初步 (二) Date 周六 10 一月 2015 By 钟谢伟 Category website develop ...
- Cardboard虚拟现实开发初步(二)
Google Cardboard 虚拟现实眼镜开发初步(二) Cardboard SDK for Unity的使用 上一篇文章作为系列的开篇,主要是讲了一些虚拟现实的技术和原理,本篇就会带领大家去看一 ...
- 初步窥探Git
码农之路恒久远,学习向上是真谛啊!在学习的过程中,相信大家或多或少都接触到Git这个东东.它到底是什么呢,有什么作用呢,为什么它会那么火呢?带着这些一连串的疑问,决心去揭开它的庐山真面目. 在软件开发 ...
- Jmeter初步使用二--使用jmeter做一个简单的性能测试
经过上一次的初步使用,我们懂得了Jmeter的安装与初步使用的方法.现在,我们使用Jmeter做一个简单的性能测试.该次测试,提交的参数不做参数化处理,Jmeter各元件使用将在介绍在下一博文开始介绍 ...
- requireJS的初步掌握(二)
前面我们讲述了requireJS的一些认知和优点,==>http://www.cnblogs.com/wymbk/p/6366113.html 这章我们主要描述的是requireJS的一些常用的 ...
- redis 初步认识二(c#调用redis)
前置:服务器安装redis 1.引用redis 2.使用redis(c#) 一 引用redis (nuget 搜索:CSRedisCore) 二 使用redis(c#) using System ...
- gdb初步窥探
本文是通过学习左耳朵皓帝的文章,详见:http://blog.csdn.net/haoel 1.使用gdb gdb主要是用来调试c和c++程序,首先在编译前我们先把调试信息加到可执行程序当中,使用参数 ...
- gcc初步窥探
由于没有上过Linux编程这门课,所以Linux学得很水啊!!用来用去都是ls -al ; cd .. ;这些渣命令,尤其gcc都不知道什么东西来的,所以先学一下吧. 一.程序的编译过程 对于GUN编 ...
随机推荐
- BufferedImage缓存图片(data:image/jpg;base64,)转换base64输出与解析
1.比如说二维码图片数据data,不想落地生成jpg文件,通过java缓存文件转换base64输出到页面展示,那么java后端处理写法参考如下: InputStream is = new ByteAr ...
- MySQL----MySQL数据库入门----第五章 多表操作
5.1 外键 比如说有两个数据表,分别是学生信息表student和年级表grade.在student表中有存储学生年级的字段gid(外键),在grade表也有存储学生年级的字段id(主键),stude ...
- Delphi调用爷爷类的方法
Delphi通过inherited 可以调用父类的方法,但是没有提供直接调用父类的父类的方法(爷爷类),通过变通的方式实现如下: 假设父类是TFather,爷爷类TGrand,调用爷爷类的Write方 ...
- string 模块
string 说明:string 模块保留了很多有用的常量和类,用来处理 string 和 unicode 对象. 作用:包含处理文本的常量和类. capwords( ) capwords( ) 的作 ...
- LVM实操
说明 以下所有操作都基于centos6.9 什么是LVM LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬 ...
- CRLF注入学习
预备 <CRLF>是换行符,CRLF注入顾名思义就是把换行符写入,那么要把换行符写入到哪里呢?看看下面的http头 可以看到,每一行都包含特定的头部信息,然后以换行为标志写入其他的头部信息 ...
- 20155319 2016-2017-2《Java程序设计》课程总结
20155319 2016-2017-2<Java程序设计>课程总结 每周作业链接 预备作业1:亦师亦友--我所期望的师生关系,对专业的认识与期望等 预备作业2:没有了自主,学习的小船说翻 ...
- # 2017-2018-1 20155336《信息安全技术》实验二——Windows口令破解
2017-2018-1 20155336<信息安全技术>实验二——Windows口令破解 实验原理 口令破解方法 口令破解主要有两种方法:字典破解和暴力破解. 字典破解是指通过破解者对管理 ...
- DataGrid中的DataGridCheckBoxColumn用法 ..
<my:DataGridCheckBoxColumn Header=" /> private void btnDeleteNote_Click(object sender, Ro ...
- WPF GDI+字符串绘制成图片(一)
原文:WPF GDI+字符串绘制成图片(一) 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/BYH371256/article/details/83 ...