COM的产生
在以前程序设计过程中,程序员把它们的函数库放在一个叫做目标(Object)文件的单独文件中,在这些文件中,包含了编译过的代码。当程序员要使用一个特别的目标文件的时候,他们把客户程序编译成机器代码,然后依靠动态链接的手段把客户程序联接到目标文件上,最后变成一个单一的可执行文件。这种作法的唯一的好处在于它节省了编译函数库的时间。但是它有许多的缺点,比如由于在每个单独的可执行文件中都有一个程序库包括在里面,浪费了许多存储空间;对应用程序的维护也是非常困难的,如果在函数库中发现了一个bug,整个可执行文件都要被重新编译和分发。
还有不只一个的严重的限制在里头,一个客户应用程序必须要和用同一种语言编制的函数库在一起才能使用。比如说,一个用QuickBasic写的客户应用程序就不能引用一个用C++写的函数库。
因此,微软公司出品了COM,COM仅仅只是一个规范。不管组件用什么语言写成,只要符合这个COM规范,就能被用任何一种语言写成的客户程序调用。此外,程序员不必再担心要去建立一个单一的可执行文件,因为组件是以GUID(Global Unique Identifier全球唯一标识符)来标识的。GUID是一个128位的号码,和一些相关的信息一起被放在系统的注册表中,用来唯一标识组件。客户应用程序只在运行期间才动态地建立一个组件的实例,并使用这个组件的功能,因此,只需要一个函数库的拷贝。它的缺点就是大家常常提到?quot;DLL地狱"。这个问题在一个DLL要被一个新版本的DLL所取代时引发。开发者不得不通过关闭所有的客户应用程序的方法(如果不行,还要关闭WWW服务)来达到清除所用对这个组件的引用的目的。有时所有的方法都还起不了作用,那你只好重新启动服务器后才能替换掉老的DLL。
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)自动地实例化机器上的具有最多资源的服务器上的请求对象。
Top
学习COM+的笔记
1.COM+介绍
可能有许多人已经用COM设计过应用程序并知道它有很多局限性。实际上,这项技术的一个主要问题是它不太适用于通常通过公司的局域网(LAN)或广域网(WAN)进行发布的企业级应用程序。
MS很久以前就意识到了这种限制,并试图通过分布式COM(DCOM)来弥补这个缺陷。
但是DCOM也存在一些限制,所以MS在Windows2000中提出了COM+.
COM+不是一项新技术,它是对当前技术的一个扩充。
COM+中增加的主要东西包括两种已有的技术,微软事务服务器(MTS)和微软消息对列(MSMQ)。MTS通过事务增加了COM的可靠性。它确保每次COM数据传输至少发生一次,而且只有一次。另一方面MSMQ还改正了另一个与COM有关的问题,就是紧密连接的应用程序的问题。当使用位于本地机器上的应用程序时,客户和服务器同时存在。但是分布式应用程序就不能保证这一点。用户可能在没有连接到服务器上但同时又创建了新的工作。分布式应用程序需要提供一个强健的环境,允许用户在服务器处于不可用状态时仍然可以工作。
1.1 COM+的历史
DDE和OLE是MS早期的东东。后来OLE发展成了ActiveX(一种特殊类型的组件技术)。ActiveX实际上包含有DDE和OLE中的多种概念和技术,它增加了一种思想,既可以将ActiveX控件(独立的专用程序或库,通常很小)用于传统的应用程序或嵌入到HTML文档中在internet上使用。
DCOM在分布式计算中所起的作用
DCOM它依赖于开放软件基金会(OSF)分布式计算环境(DCE)的远程程序调用网络协议获得了成功。它可以使应用程序通过网络以DDE、OLE和COM进行通信。另外,DCOM创建的链接即安全又持久。如果移动了服务器端的组件,则客户机无论如何也找不到它。不过,排除掉那些不合理的东西DCOM还是十分可靠的。
DCOM的问题在于它与协议结合的台紧密了。这意味着客户和服务器必须同时存在并且在他们之间有连接。
DCOM还存在其他的问题。对于一次通信至少要发生一次而且只能发生一次来说DCOM就不能提供任何保证。
那么COM+有多好呢?实际上COM+是三种技术的结合:DCOM、MTS和MSMQ。DCOM有一个并且只有一个问题,就是信息的传输。将MTS加进来就解决了这个问题。现在每次数据传输都将作为一个事务而发生,这就意味着每次传输将只发生一次,而且至少发生一次。DCOM不能在非连接的环境中工作。MSMQ使用一个消息协议解决了这个问题。
1.2 COM+要点
1.2.1连通性
COM+有两种连通性。第一,COM+所包含的MTS确保了通信的可靠性。每一次通性都保证发生且仅发生一次。第二,非连接的应用程序的开发意味着无论在何处都可以产生数据,即使没有直接连接到服务器也可以。
1.2.2用户
无论是对用户还是对程序员,COM+都设计有可靠的连通性和简易的使用性。
1.2.3用户界面
1.2.4程序员
大多数开发人员能够从COM+中得到的好处
快速的开发时间、更少的调试时间、更多的自动功能、更加可靠
1.3 COM+和COM的比较
从创建组件的角度来讲,COM和COM+是相同的。实际上,在谈及组件时COM+仅是对现存COM技术的一个扩充。COM+是COM的一个超集,所以在应用程序中用COM+代替COM不会丢失任何东西。