SOAP1.1 - http://www.w3.org/TR/2000/NOTE-SOAP-20000508/
概述
SOAP是基于XML的协议。 SOAP协议由三部分内容组成:
1. SOAP envelope - 定义SOAP的消息格式
2. SOAP encoding rule - 定义SOAP消息的数据类型,以及如何交换类型化的数据内容
3. SOAP RPC representation - 用SOAP表示RPC调用和Response
SOAP消息交换模式
SOAP本质上是一个one-way的消息,但是组合多个SOAP消息可以实现Request/Response或者Multicast模式的消息。SOAP消息要和网络系统配合使用,例如可以利用HTTP协议本身Request/Response的特性来实现SOAP消息的Request/Response。
SOAP消息可以被传递路径上的多个中间节点处理。一个SOAP应用收到SOAP消息后处理原则如下:
1. 确定属于这个应用的SOAP消息所有组成部分
2. 验证所有的必需的消息组成部分都存在并且进行相应的处理。如果消息体有缺失则应该丢弃这个消息。在不影响处理结果的前提下可以忽略可选的消息部分
3. 如果这个处理节点不是消息的最终目的地,SOAP应用应该移除第一步确定的消息组成部分,然后把剩余消息传的给消息路径上的下一个处理节点
SOAP和XML的关系
所有的SOAP消息都是由XML编码的。
一个SOAP应用在生成SOAP消息的时候应该在所有的element和attribute上带上正确namespace。SOAP应用在收到SOAP消息的时候应该可以正确的处理namespace。SOAP应用应该丢弃带有错误namespace的消息。SOAP应用可以处理没有namespace的消息,在这种情况下应该按带有正确的namespace消息处理方式进行处理。
SOAP消息里面不能带有DTD内容,也不能带有和消息处理方式相关的内容。
SOAP Envelope
<SOAP-ENV:Envelop>
<SOAP-ENV:Header>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
<SOAP-ENV:OtherElement>
</SOAP-ENV:OtherElement>
</SOAP-ENV:Envelope>
1. SOAP Envelope
- encodingStyle attributre
- There is no version number for SOAP envelope. Namespace is the only place for version validation
2. SOAP Header - header is optional in SOAP message
- actor attribute - define the target node for this header sub element
- mustUnderstand attribte - indicate if the header must be processed
3. SOAP Body
4. SOAP Fault
SOAP Encoding
在定义SOAP1.1的时候XML Schema还没有成为标准,所以SOAP1.1定义了自己的encoding方案,这个方案用到了XML Schema的部分简单数据类型,但是对于复杂数据类型的定义是完全不同的。SOAP Encoding会影响消息的互通性,所以在新的SOAP1.2版本里面可能会作为可选的标准出现。此外WS-I BP也禁止在Web Service中使用SOAP Encoding,并要求使用基于XML Schema的Literal方式。
SOAP HTTP
SOAP RPC
描述如何用SOAP消息表示一个RPC请求和Response:
1. The URI of the target object - 一般和binding的协议有关,比如利用HTTP协议的Request URL作为target object的地址
2. A method name - 用SOAP Body里面第一个子element的名字表示方法名
3. The parameters to the method - 用表示方法名的子element下面的子elements表示输入参数
4. Response message - 用SOAP Body里面的第一个子element表示,element的名字可以为任何值,并不重要
5. The return value - 用表示Response的子element下面的子elements表示返回值。一般返回值做为第一个element,其他out parameters为后续的elements
6. Optional header data - e.g. transaction data