SOAP
This is my study note of SOAP.
总体简介
介绍
soap是一种简单的基于XML的协议,可以使应用程序在分散式或者分布式的环境通过HTTP来交换信息。其组成部分包括:
- SOAP信封
1
定义了一个框架,框架描述了消息中的内容是什么,包括内容、发送者、接收者、处理者以及如何处理消息。
- SOAP编码规则
1
定义了一系列化的机制,用于交换应用程序所定义的数据类型的实例。
- SOAP RPC表示
1
定义了远程调用和应答的协议。
- SOAP绑定SOAP基本是从发送端到接收端的单向传输,类似请求/应答模式
1
定义了一种底层传输协议来完成结点间交换SOAP信封的协议。
特性
- 轻量级
- 用于应用程序间的通信
- 使用SOAP的应用使用HTTP协议通信
- SOAP独立于平台
- SOAP基于xml
- SOAP简单可扩展
- SOAP可绕过防火强
SOAP消息组成
一条SOAP消息就是一个简单的XML文档,文档包括以下元素:
- Envelope(信封),必选,可把XML消息标识为SOAP消息
- Header(报头)元素,可选,包含头部信息
- Body(主体),必选,包含所有的调用和响应信息
- Fault元素,可选,提供有关处理此消息所发生错误的信息
- Attachment,可选,添加一个或多个附件拓展SOAP消息
SOAP基本消息结构
1 | <?xml version="1.0"?> |
SOAP Header元素
- actor属性
1
沿着消息路径经过不同的断点,soap消息并不是全部消息都传输到最终的端点,actor属性用于寻址到特定的端点。
- mustUnderstand属性
1
用于标识对进行处理的接收者来说是强制的还是可选的,1强制,0可选。
- encodingStyle
1
定义使用的数据类型。
SOAP Fault元素
SOAP Fault必须包括以下子元素:
子元素 | 描述 |
---|---|
faultcode | 供识别故障的代码 |
faultstring | 可供人阅读的有关故障的说明 |
faultactor | 有关是谁引发故障的信息 |
detail | 存留涉及Body元素的应用程序专用错误信息 |
下面这些faultcode值必须用于描述时faultcode中:
值 | 描述 |
---|---|
VersionMismatch | SOAP Envelope元素的无效命名空间被发现 |
Misundestand | Header元素的一个直接子元素(带有设置为 “1” 的 mustUnderstand 属性)无法被理解。 |
Client | 消息被不正确的构成,或者包含不正确的信息 |
Server | 服务器有问题,因此无法处理进行下去 |
SOAP附件
SOAP实际上被分为两种类型:
- 仅包含XML内容的消息
- MIME编码的消息
1
SOAP规范规定SOAP消息可以包含XML格式的主SOAP信封,以及包含ASCLL或二进制等任何数据格式的SOAP附件。如果包含附件,则消息将是一个MIME编码消息。
消息绑定
style属性
- RPC方式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55客户端/服务端方式,发送请求到服务器端,服务器执行完后返回结果,要使用RPC必须遵循几条规则:
1.请求和响应消息必须被编码成结构类型
2.对每一个操作的每一个参数都必须有一个同名元素做为参数
3.对每一个输出参数都必须有一个名称匹配的参数
RPC请求消息格式:
<SOAP信封>
<SOAP头部>
……
</SOAP头部>
<SOAP消息体>
<请求操作名称>
<参数名1>值</参数名1>
<参数名2>值</参数名2>
......
</请求操作名称>
</SOAP消息体>
</SOAP信封>
RPC响应消息格式:
<SOAP信封>
<SOAP头部>
……
</SOAP头部>
<SOAP消息体>
<响应操作名称>
<参数名1>值</参数名1>
<参数名2>值</参数名2>
......
</响应操作名称>
</SOAP消息体>
</SOAP信封> - DOCUMENT方式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48与RPC相比,DOCUMENT方式在XML文件中不是做远程方法的映射,而是一个完整业务的文档,当服务器受到这份文档后,不再是进行简单的方法调用,而是多个对象协同完成一个事务的处理,再返回结果。采用DOCUMENT方式构造消息,SOAP Body元素中的内容完全由WSDL中的XML Schema定义。
Document请求消息格式:
<SOAP信封>
<SOAP头部>
……
</SOAP头部>
<SOAP消息体>
<输入消息>
….
</输入消息>
….
</SOAP消息体>
</SOAP信封>
Document响应消息格式:
<SOAP信封>
<SOAP头部>
……
</SOAP头部>
<SOAP消息体>
<输出消息>
….
</输出消息>
….
</SOAP消息体>
</SOAP信封>
use属性
- Encode
1
取值为encoded时,设置encodingstyle属性的值指定编码规则。
- literal
1
可以不用设置encodinstyle属性,默认使用XML Schema。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 风声向寂!
评论
ValineDisqus