SOAP是一种基于XML的消息规范,它描述了数据类型的消息格式以及一整套串行化规则,包括结构化类型和数组。另外,它还描述了如何使用HTTPS来传输消息。SOAP作为一种有效的服务请求被发送到一些网络节点,节点就可以采用下列任何方法在任意平台上执行,如远程过程调用(RPC)、组件对象模型(COM)、Java
Servlet、Perl Script。因此SOAP提供了应用程序之间的交互能力,这些应用程序可以在异构的平台上运行,而且可以使用不同程序语言和不同的技术实现。 SOAP(Simple Object Access Protocol,简单对象访问协议),是一个基于XML的、在分散或分布式的环境中交换信息的简单协议,它主要包括四个部分: l
SOAP
Envelope:定义一个描述消息中的内容、发送者、接受者、处理者以及如何处理的框架。 l
SOAP编码规则(encoding rule):用于表示使用数据类型的实例。 l
SOAP RPC表示(RPC representation):表示远程过程调用和应答的协定。 l
SOAP绑定(binding):使用底层协议交换信息。 这四个部分是作为一个整体定义的,他们在功能上时相交的而非彼此独立的。特别是,Envelope和编码规则在不同的XML命名空间中定义,这样是定义更加简单。SOAP的两个目标是简单性和可扩展性,这就意味着有一些传统消息系统或分布式对象系统中的某些性质将是SOAP规范中的一部分。通常,SOAP消息在应用程序之间传输,从最初的发送者传送到终端的接收者的过程中,他们可能会通过一些介质。SOAP消息一般有一个Envelope元素附带一个可选的Header元素和一个必须得Body元素组成。 SOAP与CORBA、COM/DCOM的区别: CORBA(Common Object Request Broker Architecture,公共对象请求代理体系结构)是由OMG指定的一个标准的面向对象应用程序体系规范,其核心部分是对象请求代理(Object
Request Broker ,ORB)。ORB提供了一种机制,使对象可以透明地发出请求和接收响应,他可看作是在对象之间建立客户/服务关系的一种中间件,客户可以透明地调用服务对象提供的方法,该服务对象可以与客户在同一台机器上运行,也可以运行在其他机器上,通过网络与客户进行交互。ORB截取客户发送的请求后,负责在该软件总线上找到实现该请求的服务对象,然后完成参数传递、方法调用,最后返回结果。 COM/DCOM(Component Object Model/Distributed Component Object Model)是微软公司提出的分布式组件对象模型标准,它支持在局域网、广域网甚至Internet上不同计算机的对象之间进行通信。DCOM建立在COM的应用程序、组件、工具等的基础之上,从而使用户能够集中精力解决用户所要求的问题。DCOM位于应用程序的组件之间,将组件以不可见的方式胶合在一起组成具有完整功能的应用程序。 SOAP与CORBA、DCOM/COM之间的比较如下: 1.
SOAP不会取代CORBA和COM/DCOM。COM/DCOM是一个组件模型标准,CORBA是分布式应用的服务标准。CORBA和DCOM为分布式应用程序建立服务,通过服务对象来执行客户端调用的服务。而SOAP是基于XML和HTTP的分布式对象通信协议,是COM/DCOM和CORBA对象进行通信的协议。 2.
CORBA和DCOM表示传送消息的语义,对参数和返回值使用二进制编码。但每个系统使用不同的二进制编码,系统之间的互操作很难实现。然而,使用SOAP可以实现在垂直应用层面上CORBA和DCOM技术的水平整合,能够更好的将CORBA、DCOM集成为一个整体。因为尽管SOAP并没有定义信息的语义、服务质量、事务处理等,但是它采用XML进行消息编码,有利于系统间的互操作。 3.
尽管CORBA可以在不同的平台上执行,DCOM可以再微软的各种平台上运行,但是基于CORBA和DCOM的解决方案必须依赖于单一的应用程序。DCOM和CORBA适合于服务器/服务器间的通信,但是对于客户端/服务器的通信十分脆弱,尤其当客户程序分布在Internet上更是如此。 SOAP可以理解为一个开放协议SOAP=RPC+HTTP+XML。因为它采用HTTP作为底层通信协议,以RPC作为一致性的调用途径,用XML作为数据传输格式,允许服务提供者和服务请求者通过防火墙在Internet环境下进行通信交互。SOAP使用HTTP传送XML,尽管HTTP不是有效率的通信协议,而且XML还需要额外的文件解析,使得交易的速度大大低于其他方案。但XML是一个开放、健全、有语义的信息机制,而HTTP是一个广泛又能避免许多关于防火墙的问题,从而使SOAP得到了广泛的应用。SOAP的优点在于它的简单性,SOAP使用HTTP作为网络通信协议,接受和传递数据参数采用XML作为数据格式,代替了DCOM中的NDR格式,SOAP和DCOM执行过程是类似的,只是用XML取代NDR作为编码表现形式,提供了更高层次上的抽象,与平台和环境无关。 SOAP的消息结构 SOAP是利用XML来定义分布式计算环境中交换的信息的协议,也就是说SOAP消息是用XML来编码的。SOAP将方法调用参数保存为二进制格式,将这些参数作为XML信息传递到服务器,然后,服务器上响应的SOAP处理程序提供XML信息,并将它恢复为二进制形式进行处理。SOAP消息是由一个SOAP Envelope、一个可选的SOAP Header和一个SOAP Body组成的XML文档。Envelope是XML文档形式的SOAP消息中的顶级元素;Header则是在松散环境下在通信双方之间尚未预先达成一致的情况下为SOAP消息增加特性的通用机制;Body定义了很少一些属性来指明谁可以处理以及它是可选处理还是强制处理,为该消息的最终接收者想要得到的消息提供了一个容器。此外,SOAP定义了Fault用于报告错误。 1.SOAP Envelope是XML文档的顶级元素。XML命名空间可用于将SOAP标识符与应用程序的特定标识符区分开,XML命名空间在SOAP中使用的很频繁,用来把消息的元素的作用于限制在一个特定的区域,理解SOAP命名空间有助于熟悉XML命名空间规范。SOAP命名空间通过吧SOAP元素与特定的位置相关联,从而唯一地标识SOAP元素。 2.Header元素应当作为SOAP Envelope XML文档的第一个直接子元素。Header的所有直接子元素都称为Header条目。一个Header条目由一个完整修饰的元素名来标识,所谓完整修饰的元素名是由一个命名空间URI和局部名组成。Header元素的所有直接子元素都必须是完整修饰的,不允许没有命名空间修饰的Header条目存在。 3.SOAP Body元素提供一个简单的用于与消息的最终接收者交换信息的机制。Body元素的典型应用包含RPC调用和错误报告。另外,Body元素应当作为SOAP Envelope元素的一个直接子元素。如果包含Header元素,则Body元素必须紧跟Header元素,为Header元素的直接下一个兄弟元素,否则Body元素必须是Envelope元素的第一直接子元素。所有Body元素的直接子元素都称为Body条目,同时每一个Body条目都应当是SOAP Body元素里的一个独立元素。一个Body条目由一个完整修饰的元素名来标识,完整修饰的元素名是由一个命名空间URI和局部名组成的。 4.SOAP Fault SOAP Fault元素用于在SOAP消息中传输错误及状态消息。如果SOAP消息需要包含SOAP Fault元素的话,它必须作为一个Body条目出现,而且在Body元素内之多出现一次。SOAP Fault元素有以下的子元素:faultcode、faultstring、faultactor、detail SOAP的应用模式 1.
请求/响应模式 2.
Fire-and-forget模式 3. 高级消息交换模式 |
|