什么是SOAP?

本章节主要目的:了解SOAP

SOAP(Simple Object Access Protocal) 简单对象访问协议

以下是维基百科的解释:

一种标准化的通讯规范,主要用于Web服务(web service)中。SOAP的出现是为了简化网页服务器(Web Server)在从XML数据库中提取数据时,无需花时间去格式化页面,并能够让不同应用程序之间透过HTTP通讯协定,以XML格式互相交换彼此的数据,使其与编程语言、平台和硬件无关。此标准由IBM、Microsoft、UserLand和DevelopMentor在1998年共同提出,并得到IBM,莲花(Lotus),康柏(Compaq)等公司的支持,于2000年提交给万维网联盟(World Wide Web Consortium;W3C),目前 SOAP 1.1 版是业界共同的标准,属于第二代的XML协定(第一代具主要代表性的技术为XML-RPC以及WDDX)。

用一个简单的例子来说明 SOAP 使用过程,一个 SOAP 消息可以发送到一个具有 Web Service 功能的 Web 站点,例如,一个含有房价信息的数据库,消息的参数中标明这是一个查询消息,此站点将返回一个 XML 格式的信息,其中包含了查询结果(价格,位置,特点,或者其他信息)。由于数据是用一种标准化的可分析的结构来传递的,所以可以直接被第三方站点所利用。

再总结下个人的理解:SOAP是一种由W3C维护的业界的标准,是基于XML的,具有共用性。

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:Header> <m:Trans xmlns:m="http://www.w3school.com.cn/transaction/" soap:mustUnderstand="1" soap:actor="http://www.w3school.com.cn/appml/">234</m:Trans> </soap:Header>
  <soap:Body xmlns:m="http://www.example.org/stock">
    <m:GetStockPrice>
      <m:StockName>IBM</m:StockName>
    </m:GetStockPrice>
  </soap:Body>
 </soap:Envelope>

回应


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的内容

Envelope是SOAP的根元素,是必须的元素。

xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"

定义了SOAP的命名空间,并将此XML封装为SOAP。注意此命名空间必须为“http://schemas.xmlsoap.org/soap/envelope/”。如若不是将会把异常抛于Fault元素。


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>
Header是可选的元素,此元素可以包括应用程序的信息(比如认证、支付、版本等)。必须是文档的第一个元素。并且所有 Header 元素的直接子元素必须是合格的命名空间

soap:actor="URI" 
SOAP消息路径在发送的时候会经过不同的端点,也许打算传送信息到一个或多个端点上,SOAP 的 actor 属性可被用于将 Header 元素寻址到一个特定的端点
 soap:mustUnderstand="1
此元素说明此信息的接受着必须对这个标题认可,如果无法认可此元素,则在处理这个头的信息的时候失败。
 
  在BODY元素中的元素并不是SOAP中的元素,这些元素都是信息传送中的数据内容所以是更具每信息的不同而不同的。

SOAP中的Fault
用来指示错误消息的,就几个属性也不展开说明了引用一下,W3C文档的一些内容吧

SOAP 的 Fault 元素拥有下列子元素:

子元素                                  描述

<faultcode>                          供识别故障的代码

<faultstring>                         可供人阅读的有关故障的说明

<faultactor>                          有关是谁引发故障的信息

<detail>                                存留涉及 Body 元素的应用程序专用错误信息

SOAP Fault 代码

在下面定义的 faultcode 值必须用于描述错误时的 faultcode 元素中:

错误                                    描述

VersionMismatch                SOAP Envelope 元素的无效命名空间被发现

MustUnderstand                 Header 元素的一个直接子元素(带有设置为 "1" 的 mustUnderstand 属性)无法被理解。

Client                                  消息被不正确地构成,或包含了不正确的信息。

Server                                服务器有问题,因此无法处理进行下去。


SOAP协议的内容基本就是这样。
下面讲解一下最上面的HTTP协议
HTTP客户端使用TCP去连接HTTP服务端。连接建立后客户机可以向服务端发送请求了。
POST /item HTTP/1.1
Host: 189.123.345.239
Content-Type: text/plain
Content-Length: 200

服务端完成了该客户机的请求后发送一个相应如果成功了

200 OK
Content-Type: text/plain
Content-Length: 200

 失败了

400 Bad Request
Content-Length: 0

 大家可以观察到成功返回代号200,失败是400。


SOAP HTTP Binding

SOAP 方法指的是遵守 SOAP 编码规则的 HTTP 请求/响应。

HTTP + XML = SOAP

SOAP 请求可能是 HTTP POST 或 HTTP GET 请求。

HTTP POST 请求规定至少两个 HTTP 头:Content-Type 和 Content-Length。

Content-Type

SOAP 的请求和响应的 Content-Type 头可定义消息的 MIME 类型,以及用于请求或响应的 XML 主体的字符编码(可选)。

语法

Content-Type: MIMEType; charset=character-encoding 

例子

POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8

Content-Length

SOAP 的请求和响应的 Content-Length 头规定请求或响应主体的字节数。

语法

Content-Length: bytes 

例子

POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 250



 
  







服务器有问题,因此无法处理进行下去。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值