

(a) 三层结构技术组成模型 (b) Windows DNA结构
图1
在现有的系统平台以及软件开发工具条件下,为了实现多层结构的企业应用,我们必须使用各种分离的技术,开发人员要学习每一种软件技术,包括使用Win32 API以及系统提供的一些服务。图1(a)列出了某些可能用到的软件或者技术,学习这些知识本身就不是一件轻松的事情,更何况要开发出优秀的应用程序来。在Windows平台上使用过这些技术的程序员一定深有体会。
图2 COM+组成结构图
COM+不仅继承了COM、DCOM和MTS的许多特性,同时也新增了一些服务,比如负载平衡、内存数据库、事件模型、队列服务等。COM+新增的服务为COM+应用提供了很强的功能,建立在COM+基础上的应用程序可以直接利用这些服务而获得良好的企业应用特性,本文第二部分将重点介绍这些服务。
图3 COM+管理程序运行示意图

图4 COM+组件的属性配置示意图
我们知道,COM和MTS把组件的所有配置信息都保存在Windows的系统注册表中,然而,COM+的做法有所不同,它把大多数的组件信息保存在一个新的数据库中,称为COM+目录(COM+ Catalog)。COM+目录把COM和MTS的注册模型统一起来,并提供了一个专门针对组件的管理环境。我们既可以通过COM+管理程序检查或设置COM+目录信息,也可以在程序中通过COM+提供的一组COM接口访问COM+目录信息。
图5 跨环境调用示意图
从图5我们可以看出,环境与COM线程模型中的套间(apartment)非常类似,当对象引用(即对象接口指针)从一个环境传递到另一个环境时,它也要经过列集(marshaling)处理,即调用CoMarshalInterface和CoUnmarshalInterface函数。这样才能保证客户代码和对象分别在自己的环境中执行,对于支持事务特性、安全特性或其他特殊要求的应用,这是很重要的。
图6 队列组件模型结构图

图7 COM+事件模型结构图
COM+事件模型通过事件类来传递源对象的出接口事件信息,以便它可以与客户方的入接口事件方法相匹配,这种方式与COM可连接对象机制很类似,所以老式的COM组件和客户程序可以很方便地使用新的COM+事件模型。
图8 负载平衡模式下对象创建示意图

图9 基于IMDB的Web应用结构示意图
IMDB的接口为OLE DB和ADO,所以组件对象可以通过这些标准接口访问IMDB。由于IMDB是内存中的数据库,所以IMDB只对本机器上的COM+组件有效,也就是说,IMDB不支持分布式概念,并且多个IMDB机器不能装入同一个数据表,如果多个组件要共享IMDB中的信息,那么这些组件必须运行在同一台机器上。
图10 COM+组件编译过程示意图
2.基于属性的C++编程语言| 属性关键字 | 说明 |
| coclass | 加入COM特性支持,产生相应的IDL文件。 |
| dual | 把一个接口标记为双接口,支持两种访问方式:vtable或者IDispatch。 |
| emitidl | 指示后续所有的属性信息都被写到IDL文件中。 |
| id | 指定自动化接口中方法的分发ID(DISPID)。 |
| in/out | 指定参数的传递方向。 |
| progid | 指定组件的ProgID。 |
| retval | 指示此参数为方法的返回值。 |
| threading | 指定组件的线程模型。 |
| uuid | 指定类、类型库或者接口的GUID标识。 |
| module | 指定组件程序的信息,包括程序类型、文件名、类型库GUID、版本等信息。 |

| 欢迎光临 幽游生活 (http://www.yylive.net/) | Powered by Discuz! 7.2 |