浅谈SOAP (2)

来源:互联网 发布:淘宝无线连接转换器 编辑:程序博客网 时间:2024/05/01 13:50

浅谈SOAP (2)

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/)。又于2001年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的开发,2000年 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的一些公司产品:

Organization Product

Rogue Wave Nouveau ORB

Iona Orbix 2000

ObjectSpace Voyager

Digital Creations Zope, the Python Application Server

UserLand Frontier groupware product

Microsoft Windows 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.

参考资料

http://www.cn.ibm.com/developerWorks/xml/index.shtml(IBM公司)

http://msdn.microsoft.com/(微软公司)

http://www.w3.org/TR/soap12/(W3C联盟)

http://www.soaprpc.com/

http://www.webservices.org

http://www.soapwebservices.com

http://www.xml.org.cn(中国xml联盟)

鉴于SOAP是当前的新技术,国内资料贫乏,主要参考了国外的一些资料及IBM和MICROSOFT的相关资料,文章偏颇之处,请多指教!

作者介绍

段智华:高级软件工程师,对工作流系统有深入研究,曾参与基于XML的SU-PDM2.0产品数据管理系统的开发。目前在上海市易方公司从事SOAP/XML的研究。可通过E-mail:duanzhihua@263.net与作者联系。

原创粉丝点击