SOAP

来源:互联网 发布:班禅淘宝字画 编辑:程序博客网 时间:2024/06/05 17:39

转自维基供个人记忆

 

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

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

相关定义

  • SOAP 封装(envelop),它定义了一个框架,描述消息中的内容是什么,是谁发送的,谁应当接受并处理它以及如何处理它们;
  • SOAP 编码规则(encoding rules),它定义了一种序列化的机制,用于表示应用程序需要使用的数据类型的实例;
  • SOAP RPC表示(RPC representation),它定义了一个协定,用于表示远程过程调用和应答;
  • SOAP 绑定(binding),它定义了SOAP使用哪种协议交换信息。使用HTTP/TCP/UDP协议都可以。

把 SOAP 绑定到 HTTP 提供了同时利用 SOAP 的样式和分散的灵活性的特点以及 HTTP 的丰富的特征库的优点。在 HTTP 上传送 SOAP 并不是说 SOAP 会覆盖现有的 HTTP 语义,而是 HTTP 上的 SOAP 语义会自然的映射到 HTTP 语义。在使用 HTTP 作为协议绑定的场合中, RPC 请求映射到 HTTP 请求上,而 RPC 应答映射到 HTTP 应答。然而,在 RPC 上使用 SOAP 并不仅限于 HTTP 协议绑定。

传输方式

SOAP使用因特网应用层协议作为其传输协议。SMTP以及HTTP协议都可以用来传输SOAP消息,但是由于HTTP在如今的因特网结构中工作得很好,特别是在网络防火墙下仍然正常工作,所以被广泛采纳。SOAP亦可以在HTTPS上传输。

SOAP的消息格式采用XML。

SOAP 消息实例

请求

<soapenv:Envelope    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"    xmlns:xsd="http://www.w3.org/2001/XMLSchema"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">  <soapenv:Body>    <req:echo xmlns:req="http://localhost:8080/axis2/services/MyService/">      <req:category>classifieds</req:category>    </req:echo>  </soapenv:Body></soapenv:Envelope>
回应
 
<soapenv:Envelope    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"    xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing">  <soapenv:Header>    <wsa:ReplyTo>      <wsa:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:Address>    </wsa:ReplyTo>    <wsa:From>      <wsa:Address>http://localhost:8080/axis2/services/MyService</wsa:Address>    </wsa:From>    <wsa:MessageID>ECE5B3F187F29D28BC11433905662036</wsa:MessageID>  </soapenv:Header>  <soapenv:Body>    <req:echo xmlns:req="http://localhost:8080/axis2/services/MyService/">      <req:category>classifieds</req:category>    </req:echo>  </soapenv:Body></soapenv:Envelope>

 

原创粉丝点击