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编 ...
随机推荐
- js身份证校验
通过js实现对15位或者18位身份证格式校验: 通过调用idCardNoUtil.checkeIdCardNo(idCardNo)传入身份证号码,实现校验. var idCardNoUtil = { ...
- 大专生自学html5到找到工作的心得
先做个自我介绍,我13年考上一所很烂专科民办的学校,学的是生物专业,具体的学校名称我就不说出来献丑了.13年我就辍学了,我在那样的学校,一年学费要1万多,但是根本没有人学习,我实在看不到希望,我就退学 ...
- MongoDB 简单上手
MongoDB 是什么 MongoDB 是一种非关系型数据库(NoSQL). MongoDB中的术语解释 文档(document):形如 { name: "sue", <-- ...
- react native android模拟机调试
模拟机调试首先要确认你的环境变量的path中是不是有adb的路径,adb一般在android的adk目录下的platform-tools下,android目录默认是在c盘user/administra ...
- Python中各种进制之间的转化
1.十进制转化为其它进制 (1)bin(x):十进制转化为二进制 [实例1] x=bin(20) # x的值为字符串'0b10100' (2)oct(x):十进制转化为八进制 [实例2] x=oc ...
- 《你不知道的JavaScript》系列分享专栏
<你不知道的JavaScript>系列分享专栏 你不知道的JavaScript”系列就是要让不求甚解的JavaScript开发者迎难而上,深入语言内部,弄清楚JavaScript每一个零部 ...
- C语言中的if与else if
今天发现一个比较不理解的代码,是关于else if这个判断语句的代码.代码如下 #include<stdio.h> ; int main(void) { ) { printf(" ...
- Python之路(三)
今天这篇文章是对上一篇文章的补充,主要说一下与int和str有关的几个函数. ------------------------------------------------------------( ...
- Drupal views 学习之初识
1. 简介 用过Yii框架的同学,应该都会用到过GridView和ListView组件.可以很方便的用网格或列表展示内容. 例如淘宝: 网格显示 列表显示 2. 使用view可以方便的配出类似上面的展 ...
- thinkphp5 开启多语言
一.配置点击打开链接1.开启语言包功能'lang_switch_on' => true,2.支持的语言列表'lang_list' => ['zh-cn','en-us'],二.语言定义(默 ...