微软的COM、DOM和COM+

news2025/1/11 9:58:26

纯粹的为了记录一下

COM

组件对象模型(COM),是微软公司为了计算机工业的软件生产更加符合人类的行为方式开发的一种新的软件开发技术。在COM构架下,人们可以开发出各种各样的功能专一的组件,然后将它们按照需要组合起来,构成复杂的应用系统。由此带来的好处是多方面的:可以将系统中的组件用新的替换掉,以便随时进行系统的升级和定制;可以在多个应用系统中重复利用同一个组件;可以方便的将应用系统扩展到网络环境下;COM与语言,平台无关的特性使所有的程序员均可充分发挥自己的才智与专长编写组件模块;等等。

COM是开发软件组件的一种方法。组件实际上是一些小的二进制可执行程序,它们可以给应用程序,操作系统以及其他组件提供服务。开发自定义的COM组件就如同开发动态的,面向对象的API。多个COM对象可以连接起来形成应用程序或组件系统。并且组件可以在运行时刻,在不被重新链接或编译应用程序的情况下被卸下或替换掉。Microsoft的许多技术,如ActiveX、DirectX以及OLE等都是基于COM而建立起来的。并且Microsoft的开发人员也大量使用COM组件来定制他们的应用程序及操作系统。

COM所含的概念并不止是在Microsoft Windows操作系统下才有效。COM并不是一个大的API,它实际上象结构化编程及面向对象编程方法那样,也是一种编程方法。在任何一种操作系统中,开发人员均可以遵循“COM方法”。

DCOM

DCOM是微软与其他业界厂商合作提出的一种分布组件对象模型,它是COM在分布计算方面的自然延续,为分布在网络不同节点的两个COM组件提供了互操作的基础结构。DCOM增强COM的分布处理性能,支持多种通信协议,加强组件通信的安全保障,把基于认证Internet安全机制同基于Windows NT的C2级安全机制集成在一起。但从系统内部的实现机制而言,DCOM所采用的技术仍符COM模式。

DCOM自动建立连接、传输信息并返回来自远程组件的答复。DCOM在组件中的作用有如PC机间通信的PCI和ISA总线,负责各种组件之间的信息传递,如果没有DCOM,则达不到分布计算环境的要求。微软通过纳入事务处理服务、更容易的编程以及对Unix和其它平台的支持扩充了DCOM。

建立DCOM时和使用COM建立对象的方式是相同的,只需再加入一个机器名称的参数。如果COM通过Windows
API的CoGetClassObject建立对象,只需再输入机器名称的参数即可在远程指定的计算机中建立对象,并且取得指定接口的信息。它构造于RPC的技术之上,并且使用TCP/IP作为网络通信协议。

COM+

COM+不再局限于COM的组件技术,它更加注重于分布式网络应用的设计和实现。COM+继承了COM几乎全部的优势,同时又避免了COM实现方面的一些不足,把COM、DCOM和MTS的编程模型结合起来,继承了它们的绝大多数特性,在原有的特性上增加了新的功能。

以下列出COM+的几个主要特性:

COM+不仅继承了COM所有的优点,而且还增加了一些服务,比如队列服务、负载平衡、内存数据库、事件服务等。

COM/DCOM/COM+关系

在这里插入图片描述

DCOM/MTS/MQ/COM+

为了让企业级的应用程序能使用上COM,它必需要有以下的特定的能力:

  • 验证能力
  • 对象池(Object Pooling)
  • 事务处理
  • 支持分布式架构

为了使开发者不必去为他们的组件添加这些能力,微软公司出品了DCOM(Distributed
COM分布式COM)和MTS(Microsoft Transaction Server微软事务服务器)。使用这两种技术,开发者就可以把精力用在他们的商业逻辑上,而不必放在后台的他们的组件上。

DCOM是一个用于分布式的组件之间的通讯的RPC(Remote Procedure
Call)协议。客户端向一个本地机的代理类发送请求,然后由代理类将这个请求隐含地给安装在远程机器上的"根"类,然后执行结果原路送回给代理类,最后代理类把它们回送给客户端。因此,客户程序的位置完全与组件的位置无关。DCOM的缺点在于,由于DCOM使用的是一个独立的硬件端口,而不是HTTP协议的80端口,所以在组件间通讯的过程中,必须保证这个端口是开着的。这是一个严重的安全问题。所以DCOM不能够轻易地穿越防火墙。

为了使用MTS,程序员在它们的组件里放置特别的MTS钩子,编译后把他们放在MTS包中。把有关系的组件放在一个单一的包中有它自己的好处。当客户请求一个包中的一个组件的一个实例的时候,MTS确保为这个包建立一个新的专门的线程,一个新的组件实例被建立在这个线程上并被应用事务服务。至于对象池服务和安全服务是否要被建立,那就要看开发者的请求了。

MTS允许相关的作业单元被当作一个事务来对待,这意味着如果所有的作业单元被成功地完成,整个事务就被当作成功地完成,反之如果有一个单元未成功完成,整个事务将被重新轮回。

在客户请求对象和释放对象后,MTS仍保存着这个对象,所以当另一个客户请求同一个组件的时候,MTS就将保存着的对象交给它。通过这种方式,MTS减少了在服务器源实例化的次数。

MTS允许开发者用安全措施来组装他们的组件,以使其具有识别请求它的服务的客户的能力。这能够确保未经授权的客户不能够使用组件的功能。

MTS以COM+的名义被完整地整合到了微软公司的Windows
2000操作系统中,但是COM+不仅仅只有MTS,它还包括一些其它的服务。MSMQ(Microsoft Message Queue
Server),一个与MTS一同发布的服务,也被以COM+的名义整合到了Windows
2000中。MSMQ允许服务器端和客户端进行同步的通讯。事件服务(Event
Service)也被加了进来,它使服务器能够与客户端同步地交流事件的发生。负载平衡服务(Load
Balancing)自动地实例化机器上的具有最多资源的服务器上的请求对象。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/146246.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大数据NiFi(九):NiFi集群页面的添加、配置处理器操作

文章目录 NiFi集群页面的添加、配置处理器操作

jdb2/kworker

测试代码出自&#xff1a;块设备IO优化的典型案例分析_papaofdoudou的博客-CSDN博客_kworker/u2:2-2- #include <stdio.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/ioctl.h> #include <unistd.h&g…

基础算法 - 常见算法模板题(最简洁写法)【下】

目录 双指针 最长连续不重复子序列​编辑 二进制中1的个数 离散化 区间和 区间合并 双指针 最长连续不重复子序列 思路&#xff1a; 设左右指针 j&#xff0c;i&#xff1b;用 i 遍历数组&#xff0c;对【j&#xff0c;i】范围路径数值出现次数记录若次数大于1&#xff0c;则…

Seata-go 发布 1.0.3,补齐 AT 模式

文&#xff5c;赵新&#xff08;花名&#xff1a;于雨 )蚂蚁集团 Seata 项目开源负责人本文 3902 字 阅读 10 分钟发布概览Seata-go 1.0.3 版本补齐了 AT 模式下对 Insert/Delete 的支持&#xff0c;这意味着除了 “select for update” 外&#xff0c;Seata-go 的 AT 模式与 S…

【c++】 STL的组件简介与容器的使用时机

STL六大组件简介 STL提供了六大组件&#xff0c;彼此之间可以组合套用&#xff0c;这六大组件分别是:容器、算法、迭代器、仿函数、适配器&#xff08;配接器&#xff09;、空间配置器。 容器&#xff1a;各种数据结构&#xff0c;如vector、list、deque、set、map等,用来存放…

ECS概述

1.ECS概述ECS全称Entity-Component-System&#xff08;实体-组件-系统&#xff09;&#xff0c;是基于组合优于继承&#xff08;将不变的部分使用继承以方便复用&#xff0c; 将多变的部分用组合来方便拓展&#xff09;的原则的一种模式&#xff0c;游戏中的每一个单元&#xf…

使用Redis踩过的16个坑

如果你在使用 Redis 时,也遇到过以下这些「诡异」的场景,那很大概率是踩到「坑」了: 明明一个 key 设置了过期时间,怎么变成不过期了? 使用 O(1) 复杂度的 SETBIT 命令,Redis 竟然被 OOM 了? 执行 RANDOMKEY 随机拿出一个 key,竟然也会阻塞 Redis? 同样的命令,为什么…

Linux基础命令学习(Bandit通关)(未完成)

一、前言 Bandit是一个学习Linux的网站&#xff0c;它采用游戏通关的方式来帮助我们学习linux基本使用的命令&#xff0c;十分适合没有基础或基础较弱的同学学习。【虽然是英文但是很容易&#xff0c;用翻译也可】 官网地址是&#xff1a;OverTheWire: Bandit 二、第一~六关…

自从用了这个良心浏览器后,我卸载了UC,太香了

要是以前如果有人问我手机上用什么浏览器好&#xff0c;我肯定一律无脑推荐UC浏览器。一方面它确实功能强大&#xff0c;另一方面是用了很多年已经习惯了&#xff0c;有感情因素在。然而&#xff0c;这次可能要打自己的脸了。 最近&#xff0c;有了个“新欢”&#xff0c;其实…

线程3

一.阻塞队列阻塞队列&#xff0c;也是特殊的队列&#xff0c;虽然也是先进先出的&#xff0c;但是带有特殊功能。阻塞&#xff1a;1.如果队列为空&#xff0c;执行出队列操作&#xff0c;就会阻塞&#xff0c;阻塞到另一个线程往队列中添加元素&#xff08;队列不空为止&#x…

C程序设计笔记(上篇)

笔记正文 第一模块 C基础知识 考试大纲的要求 &#xff08;1&#xff09;掌握数据类型、变量和赋值&#xff1b; &#xff08;2&#xff09;掌握输入和输出&#xff1b; &#xff08;3&#xff09;掌握基本运算符和表达式&#xff1b; &#xff08;4&#xff09;了解简单控制…

米尔国产开发平台T507-H之Android系统发布说明

安卓系统作为目前世界上最受欢迎的移动操作系统&#xff0c;它可以在大量的设备上使用&#xff0c;它正在接管平板电脑、汽车、智能电视、可穿戴设备、家用电器、游戏机等市场&#xff0c;它为嵌入式平台提供了独特而熟悉的体验&#xff0c;从小的手机屏幕到显示器&#xff0c;…

SpringCloud 网关组件 Gateway 原理深度解析

引入网关的必要性 在微服务架构下&#xff0c;我们一般会把相对独立的业务或功能划分为不同的服务&#xff0c;不同服务之间相互隔离&#xff0c;独立部署。这些微服务由服务注册中心集中管理。对于来自外部的用户请求来说&#xff0c;在处理请求的核心业务逻辑之前&#xff0…

Vector - VT System - 模拟输入仿真_VT2004

在我们的测试工作中&#xff0c;经常会遇到一些模拟信号的输入&#xff0c;如果我们使用实际的样件的话一个成本过高&#xff0c;另外一个就是对我们测试人员对环境搭建要求过高&#xff0c;因此最好的办法就是有一个设备能够模拟我们需要的任意信号&#xff0c;这样就能完美的…

Pytorch TextCNN实现中文文本分类(附完整训练代码)

Pytorch TextCNN实现中文文本分类(附完整训练代码) 目录 Pytorch TextCNN实现中文文本分类(附完整训练代码) 一、项目介绍 二、中文文本数据集 &#xff08;1&#xff09;THUCNews文本数据集 &#xff08;2&#xff09; 今日头条文本数据集 &#xff08;3&#xff09;自…

字节跳动青训营笔试题解

文章目录前言一、单选题二、多选题三、编程题T1.旋转数组最大值题目思路代码T2.社交圈题目思路代码四、简答题题目思路前言 第五届字节跳动青训营-后端专场笔试题解&#xff0c;简单做了一下&#xff0c;选择题和简答题不知道是否正确&#xff0c;编程题是通过了的&#xff0c…

基于javaSpringboot+mybatis+layui的装修验收管理系统设计和实现

基于javaSpringbootmybatislayui的装修验收管理系统设计和实现 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文…

创建List保存学生信息

1 问题创建一个存储学生对象的集合&#xff0c;存储3个学生对象&#xff0c;使用程序实现在控制台遍历该集合。2 方法1、定义学生类2、创建List集合对象3、创建学生对象4、将学生添加到集合5、遍历集合创建的学生类代码&#xff1a;package no10;public class Student { …

uni微信小程序,打开地图,跳转第三方

一、需求 微信小程序 需要点击并跳转第三方地图软件导航&#xff0c;并计算到目标位置距离 二、思路 思路&#xff1a; 1.接口返回需要有位置的经纬度&#xff0c;这个自行在后台编辑获取 2.需要获取用户的位置权限 我这边使用的是uniapp&#xff0c;需要使用官方封装两个…

threejs官方demo学习(3):几何体

webgl_geometries 这个案例还是比较简单的&#xff0c;主要介绍了一些创建物体的创建。 知识点 PointLight PointLight 点光源&#xff0c;从一个点向各个方向发出光线的光源&#xff0c;比如灯泡。 BoxGeometry BoxGeometry 立方缓冲几何体 SphereGeometry SphereGeometr…