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> 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值