日期:2012-10-01  浏览次数:20391 次

2001 年 8 月
本文对SOAP作了一个初步介绍,给出几个简单示例;接着比较CORBA,DCOM/COM与SOAP的联系与区别;然后浅析SOAP简单的理解为RPC+HTTP+XML时的运行机制;最后展现SOAP的前景。

一:为什么需要SOAP?
随着计算机技术的不断发展,现代企业面临的环境越来越复杂,其信息系统大多数为多平台、多系统的复杂系统。这就要求今天的企业解决方案具有广泛的兼容能力,可以支持不同的系统平台、数据格式和多种连接方式,要求在Internet 环境下,实现系统是松散耦合的、跨平台的,与语言无关的,与特定接口无关的,而且要提供对Web 应用程序的可靠访问。
随着异种计算环境的不断增加,各种系统间的互操作性就愈显得必要,要求系统能够无缝地进行通信和共享数据,从而在 Internet 环境下,消除巨大的信息孤岛,实现信息共享、进行数据交换,达到信息的一致性。Web services 希望实现不同的系统之间能够用"软件-软件对话"的方式相互调用,打破了软件应用、网站和各种设备之间的格格不入的状态,实现"基于WEB无缝集成"的目标。
今年四月份的时候,W3C联盟召开了第一次 Web 服务专题研讨会,目的为探索 W3C 应向哪个方向发展才能实现新兴的 Web 服务架构的标准化,期间提出了一个"Web 服务堆栈"的构想,如下图,从图中可以看出,SOAP在WEB服务堆栈中作为用于 XML 消息传递的一种非常普遍的协议,发挥着十分重要的作用。

二:什么是SOAP?
SOAP(Simple Object Access Protocol )简单对象访问协议是在分散或分布式的环境中交换信息的简单的协议,是一个基于XML的协议,它包括四个部分:SOAP封装(envelop),封装定义了一个描述消息中的内容是什么,是谁发送的,谁应当接受并处理它以及如何处理它们的框架;SOAP编码规则(encoding rules),用于表示应用程序需要使用的数据类型的实例; SOAP RPC表示(RPC representation),表示远程过程调用和应答的协定;SOAP绑定(binding),使用底层协议交换信息。
虽然这四个部分都作为SOAP的一部分,作为一个整体定义的,但他们在功能上是相交的、彼此独立的。特别的,信封和编码规则是被定义在不同的XML命名空间(namespace)中,这样使得定义更加简单。
SOAP的两个主要设计目标是简单性和可扩展性。这就意味着有一些传统消息系统或分布式对象系统中的某些性质将不是SOAP规范的一部分。比如:分布式垃圾收集 (Distributed garbage collection)、成批传送消息(Boxcarring or batching of messages)、对象引用 (Objects-by-reference(which requires distributed garbage collection))、对象激活 (Activation(which requires objects-by-reference))。
SOAP消息举例:
1.第一个例子阐明了SOAP中一个简单的通信信息,包括了两个不是SOAP定义而是应用程序定义的元素:头块元素alertcontrol 和体块元素alert。头块元素包括两个参数:priority 和expires。体块元素包括的是实际传送的信息。

(EXAMPLE 1)
2.SOAP通信与底层的不同协议和不同的交换格式有关,下面的例子SOAP使用HTTP作为底层通信协议,从而可以很好的使用request/response机制来传送信息。 SOAP/HTTP请求包括一个GetLastTradePrice的块元素,该请求携带一个字符串参数和ticker符号,在SOAP应答中返回一个浮点数。XML名域用来区分SOAP标志符和应用程序特定的标志符。

(EXAMPLE 2)
3. 例3 展示的是StockQuote SOAP服务信息,是对例2的请求作出的一条应答消息。

(EXAMPLE 3)
三:SOAP与CORBA,COM/DCOM的区别?
在SOAP刚刚提出来的时候,许多人就提出了疑问:SOAP与CORBA和DCOM的区别何在?
  1. CORBA(Common Object Request Broker Architecture)公共对象请求代理体系结构是由OMG组织制订的一种标准的面向对象应用程序体系规范。由对象请求代理ORB、对象服务、公共设施、域接口和应用接口这几个部分组成。其核心部分是对象请求代理ORB(Object Request Broker)。ORB提供了一种机制,通过这种机制,对象可以透明的发出请求和接收响应。分布的、可以互操作的对象可以利用ORB构造可以互操作的应用。ORB可看作是在对象之间建立客户/服务关系的一种中间件。基于ORB,客户可以透明的调用服务对象提供的方法,该服务对象可以与客户运行在同一台机器上,也可以运行在其他机器上通过网络与客户进行交互。ORB截取客户发送的请求,并负责在该软件总线上找到实现该请求的服务对象,然后完成参数、方法调用,并返回最终结果。CORBA 1.1 由对象管理组织在 1991 年发布。定义了接口定义语言(IDL)和应用编程接口(API),从而通过实现对象请求代理(ORB)来激活客户/服务器的交互。CORBA 2.0 于 1994 年的 12 月发布定义了如何跨越不同的 ORB 提供者而进行通讯。
  2. COM/DCOM(Component Object Model / Distributed Component Object Model )是微软公司提出的分布式组件对象模型标准,支持在局域网、广域网甚至Internet上不同计算机的对象之间的通讯。DCOM基于COM的应用程序、组件、工具等的基础之上,处理网络协议的低层次的细节问题,而不必关心太多的网络协议细节,从而使用户能够集中精力解决用户所要求的问题。DCOM位于应用程序的组件之间,将组件以不可见的方式胶合在一起组成具有完整功能的应用程序。
  3. 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表示了传送信息的语义,对参数和返回值使用二进制编码。可对诸如参数名称或类型的任何元信息都