soap-学习
Posted weiyouqing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了soap-学习相关的知识,希望对你有一定的参考价值。
1. SOAP 是一种简单的基于 XML 的协议,它使应用程序通过 HTTP 来交换信息。
简单的说:SOAP是用于访问网络服务的协议。
2. 什么是SOAP
- SOAP 指简易对象访问协议
- SOAP 是一种通信协议
- SOAP 用于应用程序之间的通信
- SOAP 是一种用于发送消息的格式
- SOAP 被设计用来通过因特网进行通信
- SOAP 独立于平台
- SOAP 独立于语言
- SOAP 基于 XML
- SOAP 很简单并可扩展
- SOAP 允许您绕过防火墙
- SOAP 将被作为 W3C 标准来发展
3. SOAP 构建模块
一条 SOAP 消息就是一个普通的 XML 文档,包含下列元素:
- 必需的 Envelope 元素,作用:把此 XML 文档标识为一条 SOAP 消息;SOAP消息的根元素;
- 可选的 Header 元素,包含头部信息;包含有关 SOAP 消息的应用程序专用信息(比如认证、支付等)
- 所有 Header 元素的直接子元素必须是合格的命名空间。
-
<?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> <soap:Header> <m:Trans xmlns:m="http://www.w3school.com.cn/transaction/" soap:mustUnderstand="1">234</m:Trans> </soap:Header> ... ... </soap:Envelope>
在上例子中,包含了一个带有一个 "Trans" 元素的头部,它的值是 234,此元素的 "mustUnderstand" 属性的值是 "1"。
- SOAP 在默认的命名空间中 ("http://www.w3.org/2001/12/soap-envelope") 定义了三个属性:
- actor:可被用于将 Header 元素寻址到一个特定的端点
- 语法:soap:actor="URI"
- mustUnderstand:用于标识 标题项 对于要对其进行处理的接收者来说是强制的(1)还是可选的(0);
- "mustUnderstand="1"时,表示 处理此头部的接收者 必须认可此元素。假如此接收者无法认可此元素,则在处理此头部时必须失效。
- encodingStyle:用于定义在文档中使用的数据类型
- 这些被定义在 SOAP 头部的属性可定义容器如何对 SOAP 消息进行处理。
- actor:可被用于将 Header 元素寻址到一个特定的端点
- 必需的 Body 元素,包含所有的调用和响应信息:包含打算传送到消息最终端点的实际 SOAP 消息。
- SOAP Body 元素的直接子元素可以是合格的命名空间。SOAP 在默认的命名空间中("http://www.w3.org/2001/12/soap-envelope")定义了 Body 元素内部的一个元素。即 SOAP 的 Fault 元素,用于指示错误消息。
- 可选的 Fault 元素,提供有关在处理此消息所发生错误的信息
- 它必须是 Body 元素的子元素。
- 在一条 SOAP 消息中,Fault 元素只能出现一次。
所有以上的元素均被声明于针对 SOAP 封装的默认命名空间中:
http://www.w3.org/2001/12/soap-envelope
以及针对 SOAP 编码和数据类型的默认命名空间:
http://www.w3.org/2001/12/soap-encoding
4.SOAP 语法规则
这里是一些重要的语法规则:
- SOAP 消息必须用 XML 来编码
- SOAP 消息必须使用 SOAP Envelope 命名空间
- SOAP 消息必须使用 SOAP Encoding 命名空间
- SOAP 消息不能包含 DTD 引用
- SOAP 消息不能包含 XML 处理指令
SOAP消息的基本结构:<?xml version="1.0"?>
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" //必须,把 XML 文档定义为 SOAP 消息
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">//必须,它可把封装定义为 SOAP 封装:
//SOAP 的 encodingStyle 属性用于定义在文档中使用的数据类型; <soap:Header> ... ... </soap:Header> <soap:Body> ... ... <soap:Fault> ... ... </soap:Fault> </soap:Body> </soap:Envelope>
5. SOAP 方法指的是遵守 SOAP 编码规则的 HTTP 请求/响应。
SOAP 请求可能是 HTTP POST 或 HTTP GET 请求。
HTTP POST 请求规定至少两个 HTTP 头:Content-Type 和 Content-Length。
举例:
SOAP 请求
POST /InStock HTTP/1.1 Host: www.example.org Content-Type: application/soap+xml; charset=utf-8 Content-Length: nnn <?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> <soap:Body xmlns:m="http://www.example.org/stock"> <m:GetStockPrice> <m:StockName>IBM</m:StockName> </m:GetStockPrice> </soap:Body> </soap:Envelope>
SOAP 响应:
HTTP/1.1 200 OK Content-Type: application/soap+xml; charset=utf-8 Content-Length: nnn <?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> <soap:Body xmlns:m="http://www.example.org/stock"> <m:GetStockPriceResponse> <m:Price>34.5</m:Price> </m:GetStockPriceResponse> </soap:Body> </soap:Envelope>
以上是关于soap-学习的主要内容,如果未能解决你的问题,请参考以下文章