SOAP 1.1

来源:互联网 发布:windows怎么切换mac 编辑:程序博客网 时间:2024/04/28 18:21

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