com/dcom(component object model / distributed component object model )是微软公司提出的分布式组件对象模型标准,支持在局域网、广域网甚至internet上不同计算机的对象之间的通讯。dcom基于com的应用程序、组件、工具等的基础之上,处理网络协议的低层次的细节问题,而不必关心太多的网络协议细节,从而使用户能够集中精力解决用户所要求的问题。dcom位于应用程序的组件之间,将组件以不可见的方式胶合在一起组成具有完整功能的应用程序。
soap 与corba,dcom/com的比较。 3.1 首先指出的是soap不会取代corba,com/dcom,三者的概念有所区别。com/dcom是个组件模型标准,corba是分布式应用的服务标准。corba和dcom为分布式应用程序建立服务,服务对象来执行客户端调用的服务。而soap是基于xml和http的分布式对象的通信协议,是com/dcom和corba对象进行通讯的协议。实际上,利用soap的互操作性和corba强大的执行能力,两者可以很好的结合在一起。 omg (object management group responsible for the corba specification)正在关注这方面的发展。 3.2. corba应用程序和dcom应用程序不能实现互操作,两者不能在一起协作。因为在orpc(object rpc)协议中,用objref代表了一个正在运行对象的引用;在corba/iiop(internet inter-orb protocol)中,用交换可互操作对象引用ior(interoperable object reference)代表一个服务器的对象引用。不幸的是,ior 与 objref不能够关联起来。然而,使用soap可以实现在垂直应用层面上corba ,dcom技术的水平整合,能够更好的集成corba,dcom为一个整体。 3.3 soap并没有定义信息的语义,服务质量,基于internet的事务处理。而是采用 xml 进行消息编码,正确的处理需要服务器和客户端本身来执行,理解和执行彼此使用的信息格式(one-to-one,request/reply,broadcast,etc),应用程序本身在语义解析中扮演着十分重要的角色。而corba,dcom表示了传送信息的语义,对参数和返回值使用二进制编码。可对诸如参数名称或类型的任何元信息都不编码,但使中介很难处理消息。又因为每个系统使用不同的二进制编码,系统间的互操作的很难实现。 3.4 尽管corba可以在不同的平台上执行,dcom可以在微软的各种平台上运行,但是基于corba和dcom的解决方案必须依赖于单一的应用程序。比如说,假如运行的是dcom服务器程序,所有的分布式的客户端不得不运行于微软的操作平台上。corba 虽然可以运行于不同的平台,但corba的互操作性并没有在更高层的服务上进行扩展,如安全性和事务处理,在这种情况下,许多提供的服务没有得到很好的优化。dcom和corba适合于服务器--服务器间的通讯,但是对于客户端--服务器的通讯十分脆弱,尤其当客户程序分布在internet上更是如此。 3.5 soap不象dcom一样试图定义分布式系统的所有元素,soap没有提供分布式类库,类型安全检查,版本控制等等,soap比它处于一个更低的层次,有点类似于iiop在corba的作用,dcom却提供了一些额外的协议功能,是iiop 或者soap所不具备的。然而,许多. dcom的额外功能只有在服务器――服务器间通信时才会用到,对于客户端――服务器之间的通信则是多余的。
四:soap=rpc+http+xml soap简单的理解,就是这样的一个开放协议soap=rpc+http+xml:采用http作为底层通讯协议;rpc作为一致性的调用途径,xml作为数据传送的格式,允许服务提供者和服务客户经过防火墙在internet进行通讯交互。rpc的描叙可能不大准确,因为soap一开始构思就是要实现平台与环境的无关性和独立性,每一个通过网络的远程调用都可以通过soap封装起来,包括dce(distributed computing environment ) rpc calls,com/dcom calls, corba calls, java calls,etc。 soap 使用 http 传送 xml,尽管http 不是有效率的通讯协议,而且 xml 还需要额外的文件解析(parse),两者使得交易的速度大大低于其它方案。但是xml 是一个开放、健全、有语义的讯息机制,而 http 是一个广泛又能避免许多关于防火墙的问题,从而使soap得到了广泛的应用。但是如果效率对你来说很重要,那么你应该多考虑其它的方式,而不要用 soap。 为了更好的理解soap,http,xml如何工作的,不妨先考虑一下com/dcom的运行机制,dcom处理网络协议的低层次的细节问题,如proxy/stub间的通讯,生命周期的管理,对象的标识。在客户端与服务器端进行交互的时候,dcom采用ndr(network data representation)作为数据表示,它是低层次的与平台无关的数据表现形式。 dcom是有效的,灵活的,但也是很复杂的。而soap的一个主要优点就在于它的简单性,soap使用http作为网络通讯协议,接受和传送数据参数时采用xml作为数据格式,从而代替了dcom中的ndr格式,soap和 dcom执行过程是类似的,如下图,但是用xml取代 ndr作为编码表现形式,提供了更高层次上的抽象,与平台和环境无关。 客户端发送请求时,不管客户端是什么平台的,首先把请求转换成xml格式,soap网关可自动执行这个转换。为了保证传送时参数,方法名,返回值的唯一性,soap协议使用了一个私有标记表,从而服务端的soap网关可以正确的解析,这有点类似于com/dcom 中的桩(stub)。转化成xml格式后,soap终端名(远程调用方法名)及其他的一些协议标识信息被封装成http请求,然后发送给服务器。如果应用程序要求,服务器返回一个http应答信息给客户端。与通常对html页面的http get请求不同的是,此请求设置了一些http header,标识着一个soap服务激发,和http包一起传送。例如:对于一个询问股票价格的应用程序,服务器端具有组件提供某股票当前的价格,组件是com或corba在服务器上建立的。客户端发送一个soap请求给服务器询问股票价格。服务器依赖于服务器上的soap网关,使用内嵌的html对象调用合适的方法, 然后把得到的价格通过soap应答传给客户端。 五.soap 的前景 w3c于2000年5月8日发表了simple object access protocol (soap) 1.1版本,具体规范发布在下列站点上(http://www.w3.org/tr/soap/)。又与今年7月9号推出了soap version 1.2版本的建议草案,具体规范发布在下列站点上(http://www.w3.org/tr/soap12/)。编写soap version 1.1版本的工作小组的成员包括:developmentor, international business machines corporation, lotus development corporation, microsoft, userland software。 soap的推出是令人兴奋的。可以相信,随着网络服务的的不断发展,它将极大的改变我们的思考模式和开发模式。现在,已有许多大公司着手支持soap的开发,去年 ibm公司 和 microsoft公司 都发行了实现 soap 的第一批版本。 ibm 公司启动了apache soap 项目计划,微软最近又推出了soaptoolkit2.0的正式版,主要包括如下的一些特征:soap的高层接口和低层接口,消息对象接口,完全支持wsdl 1.1标准,支持用户自定义类型映射,并且提供了丰富和完整的开发文档以及应用实例。而且,两家公司正在互操作性方面努力研究。可以乐观的估计,不用多久,soap 互操作性的时代就将来临。 与soap相关的一些标准:
http 1.0 or greater(http://www.w3.org/protocols/http/ietf-http-ext)
the core w3c xml recommendation(http://www.w3.org/tr/1998/rec-xml-19980210)
w3c xml namespace recommendation(http://www.w3.org/tr/rec-xml-names).
xml schema(http://www.w3.org/tr/xmlschema-1/)
目前支持soap的一些公司产品: organizationproductrogue wavenouveau orbionaorbix 2000objectspacevoyagerdigital creationszope, the python application serveruserlandfrontier groupware productmicrosoftwindows dna 2000 soap是一个协议,与编程语言无关。实际上,许多语言已经开始支持soap,如:java,c/c++,vb,c#,perl,php.下面列出了在java/c++/perl/ada/python环境下soap的执行工具:
java: apache soap , developmentor's implementation, idooxoap from zvon
python: pythonware (client side only)
c++: idooxoap from zvon
perl: soap::lite
ada: an ada implementation
microsoft visual studio: the microsoft soap toolkit.