SOAP协议的定义、传输和消息

网络 网络管理
文中我们对于SOAP协议的基本定义以及封装概念,历史传输方式以及相关的消息例子都做了介绍。通过本文,大家肯定都会对其有所了解的。

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

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

相关定义

SOAP封装(envelop),它定义了一个框架,描述消息中的内容是什么,是谁发送的,谁应当接受并处理它以及如何处理它们;

SOAP编码规则(encoding rules),它定义了一种序列化的机制,用于表示应用程序需要使用的数据类型的实例;

SOAPRPC表示(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曾经代表“Simple Object Access Protocol”,但是这种缩写已经在标准的1.2版后被废止了。1.2版在2003年6月24日成为W3C的推荐版本。这种缩写容易与SOA——Service-oriented architecture产生歧义,虽然它们之间存在非常大的差异。

SOAP是在1998年由Dave Winer, Don Box,Bob Atkinson 和 Mohsen Al-Ghosein 设计的。当时是将其作为一种对象访问协议。现在,SOAP规范是由万维网联盟的XML工作组进行维护的。

传输方式

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

SOAP的消息格式采用XML。

SOAP协议的消息实例

请求

  1. <soapenv:Envelope 
  2.     xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
  3.     xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
  5.   <soapenv:Body> 
  6.     <req:echo xmlns:req="http://localhost:8080/axis2/services/MyService/"> 
  7.       <req:category>classifieds</req:category> 
  8.     </req:echo> 
  9.   </soapenv:Body> 
  10. </soapenv:Envelope> 

 回应

  1. <soapenv:Envelope 
  2.     xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
  3.     xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"> 
  4.   <soapenv:Header> 
  5.     <wsa:ReplyTo> 
  6.       <wsa:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:Address> 
  7.     </wsa:ReplyTo> 
  8.     <wsa:From> 
  9.       <wsa:Address>http://localhost:8080/axis2/services/MyService</wsa:Address> 
  10.     </wsa:From> 
  11.     <wsa:MessageID>ECE5B3F187F29D28BC11433905662036</wsa:MessageID> 
  12.   </soapenv:Header> 
  13.   <soapenv:Body> 
  14.     <req:echo xmlns:req="http://localhost:8080/axis2/services/MyService/"> 
  15.       <req:category>classifieds</req:category> 
  16.     </req:echo> 
  17.   </soapenv:Body> 
  18. </soapenv:Envelope> 

 

责任编辑:佟健 来源: 网络整理
相关推荐

2010-07-14 17:26:36

SOAP协议

2016-11-28 14:40:00

MQTT消息协议

2010-09-02 16:39:30

SOAP协议

2010-07-14 17:29:36

SOAP协议

2010-09-10 14:48:05

2010-09-02 16:34:13

SOAP协议

2010-09-10 15:18:28

SOAP协议

2013-05-27 10:48:16

TCPUDP传输协议

2010-06-13 15:32:57

TCP协议

2010-09-02 16:46:52

SOAP协议

2010-09-10 15:04:40

SOAP HTTP

2010-06-24 14:58:06

ICMP协议消息

2010-09-06 16:35:18

PPPoE协议

2017-02-09 09:25:43

2011-08-24 11:25:55

LMTPSMTP

2010-07-02 12:15:16

2010-06-09 16:28:50

TCP IP传输协议

2023-03-04 13:43:31

云终端传输协议

2009-11-04 14:44:44

AOP.NET SOA

2010-09-10 15:33:26

SOAP协议应答编码
点赞
收藏

51CTO技术栈公众号