摘录以前的贴子的主  题:  有谁能详细说说COM/DCOM,COM+? 
作  者:  bill_hongs (hongs)  
等  级:    
信 誉 值:  100 
所属论坛:  ActiveX/COM 
问题点数:  50 
回复次数:  6 
发表时间:  2002-2-1 12:38:26 
   
 
   
有谁能详细说说COM/DCOM,COM+的原理? 
  
  COM+并不是COM的新版本,我们可以把它理解为COM的新发展,或者为COM更高层次上的应用。COM+的底层结构仍然以COM为基础,
它几乎包容了COM的所有内容。有一种说法这样认为,COM+是COM、DCOM和MTS(Microsoft Transaction Server)的集成,这种说法
有一定的道理,因为COM+确实综合了这些技术要素。但更重要的一点是,COM+倡导了一种新的概念,它把COM组件软件提升到应用
层而不再是底层的软件结构,它通过操作系统的各种支持,使组件对象模型建立在应用层上,把所有组件的底层细节留给操作系
统,因此,COM+与操作系统的结合更加紧密,这也是COM+非得等到Windows 2000发布才能面世的主要原因。 
我们知道,COM是个开放的组件标准,它有很强的扩充和扩展能力,从COM到DCOM,再到MTS的发展过程也充分说明了这一点。对COM
有使用经验的读者一定可以感觉到,虽然COM已经改变了Windows程序员的应用开发模式,把组件的概念融入到Windows应用中,但
是由于种种原因,DCOM和MTS的许多优越性还没有为广大的Windows程序员所认识。MTS针对企业应用和Web应用的特点,在COM/DCOM
的基础上又添加了许多功能和特性,包括事务特性、安全模型、管理和配置等,MTS使COM成为一个完整的组件体系结构。由于历史
的原因,COM、DCOM和MTS相互之间并不很融洽,难以形成统一的整体,不过,这种状况很快就要结束,因为COM+将把这三者有效地
统一起来,形成一个全新的、功能强大的组件体系结构,并且把DCOM和MTS的各种优势以更为简捷的方式带给Windows 2000程序员和用户。 
COM+不再局限于COM的组件技术,它更加注重于分布式网络应用的设计和实现,已经成为Microsoft系统平台策略和软件发展策略的
一部分。COM+继承了COM几乎全部的优势,同时又避免了COM实现方面的一些不足。COM+紧紧地与操作系统结合起来,通过系统服务
为应用程序提供全面的服务.从COM的发展角度来看,COM最初作为桌面操作系统平台上的组件技术,主要为OLE服务。但是随着
Windows NT与DCOM的发布,COM通过底层的远程支持使组件技术延伸到了分布式应用领域,充分体现了COM的扩展能力以及组件结构
模型的优势。MTS为COM增添了许多新的内容,弥补了COM和DCOM的一些不足,它注重于服务器一端的组件管理和配置环境。COM+进一
步把COM、DCOM和MTS统一起来,形成真正适合于企业应用的组件技术。COM+不仅继承了COM、DCOM和MTS的许多特性,同时也新增了一
些服务,比如负载平衡、内存数据库、事件模型、队列服务等。COM+新增的服务为COM+应用提供了很强的功能,建立在COM+基础上
的应用程序可以直接利用这些服务而获得良好的企业应用特性, 
  
 
 
  看了楼上的评论,以我自己的经验对COM+做一点补充: 
去掉MS对于COM+华丽的包装,个人认为COM+就是COM for Business.也就是特别为商业改良的COM 
COM+相对于Com来说,主要是增加JIT,Connection Pool,QC,Auto Transaction(这是我自己想出来的,就是自动事务支持),COM+的订阅功能
和安全功能我认为还不够成熟. COM+我认为最有用的就是自动事务支持功能,它使得编写分部式事务程序非常方便.在以前要写出实现类似功能的代码非常麻烦 
JIT通过在方法调用时(而不是组件初始化时)执行数据库初始化操作,在方法调用完毕后立即释放数据库连接,减少了DBMS服务器的并发
连接.这在web服务中是相当有用的,很多时候用户都是在浏览网页内容,真正需要访问数据库都是一瞬间而已,为那么多的未知用户保留
数据库连接是很昂贵的. 
连接池技术我没有用过,因为我一直使用VB开发,从来没有用过C,COM+的连接池必须要求组件必须为MTA,所以VB和MFC都不能使用这个功能 
我认为QC是一个很有趣的功能,通过队列系统,它减少了组件的并发数,而且QC提供了松散的连接方式,加上它本身支持事务,使用QC来作为
SOAP的后端是一个很好的做法. COM+的订阅功能使得只要一次函数调用,就可以激发所有订阅者组件.这是一个相当方便的功能,对于商业上是相当实用的(比如在开出送
货单的同时,财务系统开始记账,业务系统开始扣减库存,调度系统开始分析是否需要立即出车等等).不过我认为目前COM+的订阅系统还
不够完善,限制太多,如果能够做成一个支持呼叫方式的订阅就更好了.比如可以支持非本机的部件订阅,或者发送通知给其他的基于Web
的SOAP组件.在其中再加上可编程的发送方法(比如通过编程来对不同的订阅者进行过滤和参数格式转换).以及可以把正在运行中的组件
实例作为订阅者(这一点目前是可以做到的,但是需要把实例的IUnknown接口作为参数发送,在VB中非常不方便).呵呵,关于订阅发了这么
多牢骚,有点离题了.其实上述所说的东西,自己也可以通过编程来做到,不过非常希望MS能够把它做到COM+ 2.0中.毕竟没有必要每个人都
去写一套这种东西. COM+的安全机制是基于角色和规则的(类似于NT4里面的用户和组),程序代码中通过实现一个接口就可以知道当前的调用者是谁,属于哪
个组.可以在COM+中设置谁拥有哪个组件的调用权限.不过我认为这在局域网还行,在WEB上面对那么多的anonymous就无能为力了.而且仅
仅是基于AD的管理并不够,很多时候我们都习惯把企业内部的账号和权限信息放在DBMS中,而且很多时候我们不仅仅是"允许"或者是"拒绝"
某个调用(因为我们企业的规则不可能正正好好和组件中的方法一一对应).这使得现有的COM+安全机制无法和我们业务系统整合,几乎没有用. ps:由于我对于COM+的安全机制研究并不深,如果有不当之处,还请指正.最近看了MS介绍.NET Framework的安全机制,非常希望早日使用VS.NET. 
ps again:对于学习COM+,我认为COM+其实是一个服务,与COM有很大的不同.COM是一个规范,而COM+则是一个框架(Framework). COM本身
是语言无关的,而COM+则本身包含了一些服务功能.所以在学习的时候要记得区别两者.