SOAP简介

SOAP简介


SOAP-简单对象访问协议(Simple Object Access Protocol)。SOAP是一种轻量的、简单的、基于 XML 的协议,它被设计成在 WEB 上交换结构化的和固化的信息。 SOAP 可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议(HTTP),简单邮件传输协议(SMTP),多用途网际邮件扩充协议(MIME)。它还支持从消息系统到远程过程调用(RPC)等大量的应用程序。
SOAP为在一个松散的、分布的环境中使用XML对等地交换结构化的和类型化的信息提供了一个简单的轻量级机制。SOAP本身并不定义任何应用语义,如编程模型或特定语义实现,它只是定义了一种简单的机制,通过一个模块化的包装模型和对模块中特定格式编码的数据重编码机制来表示应用语义。SOAP的这项能力使得它可被很多类型的系统用于从消息系统到RPC(Remote Procedure Call)的延伸。
目前W3C已经发布SOAP1.2版本标准,但是在目前广泛应用的还是SOAP1.1版本,详细规
SOAP V1.1:
http://www.w3.org/TR/2000/NOTE-SOAP-20000508/
SOAP V1.2:http://www.w3.org/TR/2001/WD-soap12-20010709/
 

  SOAP规范主要由四个部分组成
l         SOAP信封(envelop),它定义了一个SOAP消息表示框架,该框架描述了消息中的内容是什么,谁发送的,谁应当处理并处理它,以及这些操作是可选的还是必须的等。
l         SOAP编码规则(encoding rules),定义了一个数据的编码机制,通过这样一个编码机制来定义应用程序中需要使用的数据类型,并可用于交换由这些应用程序定义的数据类型所衍生的实例。例如可能应订单服务的需要,使用SOAP编码规则定义了订单的数据类型,并可以在订单生成的客户端与订单服务之间交换订单实例。
l         SOAP RPC 表示(RPC representation),定义了一个用于表示远端过程调用和响应的约定,例如如何使用HTTP或SMTP协议与SOAP绑定,如何传输过程调用,在具体传输协议的哪个部分传输过程响应,如我们可以在HTTP的响应的时候传递过程响应。
l         SOAP绑定(binding),定义了一个使用底层传输协议来完成在结点间交换SOAP信封的约定。
为了简化本规范,这四部分在功能上是正交的。特别的,信封和编码规则是被定义在不同的命名空间(namespace)中,这样有利于通过模块化获得简明性。
规范中还定义了两种SOAP绑定(binding),用于描述SOAP消息(message)如何通过带或不带HTTP扩展框架[6](HTTP Extension Framework)的HTTP[5]消息(message)进行传输。
SOAP 消息基本上是从发送端到接收端的单向传输,但它们常常结合起来执行类似于请求/应答的模式。所有的SOAP消息都使用XML编码。一条SOAP消息就是一个包含有一个必需的SOAP的封装包,一个可选的SOAP标头和一个必需的SOAP体块的XML文档。
  SOAP消息组成部分如下图所示:

 

图1.1 SOAP消息组成部分
SOAP 请求的 XML 部分包含三个主要部分:
l         Envelope 定义各个 SOAP 消息的余下部分会使用的 namespaces ,典型的有 xmlns:SOAP-ENV ( SOAP Envelope namespace )、 xmlns:xsi ( XML Schema for Instances ) 和 xmlns:xsd ( XML Schema for DataTypes )。
l         Header 是可选的元素,它携带认证、事务处理和支付的辅助信息。一个 SOAP 处理链中的任一元素可增加或删除 Header 里的项;元素也可选择忽略它们不认识的项。如果 Header 被使用,它必须是 Envelope 的第一个子元素。
l         Body 是消息的主要有效载体。当 SOAP 被用于执行一个 RPC 调用时, Body 包含一个单独元素,这个元素包含方法名、参数和 Web 服务的目标地址。元素的 namespace 等于目标地址,根名是方法名。

 
在HTTP中使用SOAPHTTP-超文本传输协议(Hypertext Transfer Protocol)用来时机传输WWW(World Wide Web)上的所有通信。HTTP是一个客户机-服务器模型:客户机向服务器提交一个请求,然后服务器由发送回一个应答。就现在而言,由于HTTP比较简单、稳定以及被广泛应用,而且大部分防火墙对HTTP协议的80端口是开放的,所以HTTP是服务运输层的最流行的协议。
把SOAP绑定到HTTP提供了同时利用SOAP的样式和分散的灵活性的特点以及HTTP的丰富的特征库的优点。在HTTP上传送SOAP并不是说SOAP会覆盖现有的HTTP 语义,而是HTTP上的SOAP语义会自然的映射到HTTP语义。在使用HTTP作为协议绑定的场合中, RPC请求映射到HTTP请求上,而RPC应答映射到HTTP应答。然而在 RPC 上使用SOAP并不仅限于HTTP协议绑定。
HTTP 请求和响应消息的 Content-Type 标头都必须设为 text/xml (在 SOAP 1.2 中是 application/soap+xml)。 对于请求消息,它必须使用 POST 作为动词,而 URI 应该识别 SOAP 处理器。 SOAP 规范还定义了一个名为 SOAPAction 的新 HTTP 标头,所有 SOAP HTTP 请求(即使是空的)都必须包含该标头。 SOAPAction 标头旨在表明该消息的意图。 对于 HTTP 响应,如果没有发生任何错误,它应该使用 200 状态码,如果包含 SOAP 错误,则应使用 500。
 

下面为SOAP绑定HTTP的一个示例,在本例中,一个GetLastTradePrice SOAP请求被发送给一个StackQuote服务,该请求接受一个字符串参数即蜂鸣器符号symbol,并在SOAP应答中返回一个浮点数即价格Price。SOAP Envelop元素是表示SOAP消息的XML文档的顶级元素。XML名称空间用来消除应用相关标识符与SOAP标识符的歧义。
示例1 嵌套在HTTP请求中的SOAP消息
POST /StockQuote HTTP/1.1
Host:
www.stockquoteserver.com
Content-Type: text/xml; charset="utf-8"
Content-Length: nnnn
SOAPAction: "Some-URI"

<SOAP-ENV:Envelope
  xmlns:SOAP-ENV="
http://schemas.xmlsoap.org/soap/envelope/"
  SOAP-ENV:encodingStyle="
http://schemas.xmlsoap.org/soap/encoding/">
   <SOAP-ENV:Body>
       <m:GetLastTradePrice xmlns:m="Some-URI">
           <symbol>DIS</symbol>
       </m:GetLastTradePrice>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
 

示例2 嵌套在HTTP应答中的SOAP消息
HTTP/1.1 200 OK
Content-Type: text/xml; charset="utf-8"
Content-Length: nnnn

<SOAP-ENV:Envelope
  xmlns:SOAP-ENV="
http://schemas.xmlsoap.org/soap/envelope/"
  SOAP-ENV:encodingStyle="
http://schemas.xmlsoap.org/soap/encoding/"/>
   <SOAP-ENV:Body>
       <m:GetLastTradePriceResponse xmlns:m="Some-URI">
           <Price>34.5</Price>
       </m:GetLastTradePriceResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>


Web Service

从表面上看,Web service 就是一个应用程序,它向外界暴露出一个能够通过Web进行调用的API。这就是说,你能够用编程的方法通过Web来调用这个应用程序。我们把调用这个Web service 的应用程序叫做客户。
从深层次上看,Web Service是一种新的Web应用程序分支,它们是自包含、自描述、模块化的应用,可以在网络(通常为Web)中被描述、发布、查找以及通过Web来调用。
  Web Service是基于网络的、分布式的模块化组件,它执行特定的任务,遵守具体的技术规范,这些规范使得Web Service能与其他兼容的组件进行互操作。它可以使用标准的互联网协议,像超文本传输协议HTTP和XML,将功能体现在互联网和企业内部网上。Web Service平台是一套标准,它定义了应用程序如何在Web上实现互操作性。你可以用你喜欢的任何语言,在你喜欢的任何平台上写Web Service。
Web service 更精确的解释: Web services是建立可互操作的分布式应用程序的新平台。Web service平台是一套标准,它定义了应用程序如何在Web上实现互操作性。你可以用任何你喜欢的语言,在任何你喜欢的平台上写Web service ,只要我们可以通过Web service标准对这些服务进行查询和访问。
Web Service 三个基本技术
l         Web Service通过标准通信协议,在互联网上发布有用的程序模块(以服务的方式),目前大部分是用SOAP来作通信协议。
l         Web Service提供一份详细的接口说明书,来帮助用户构建应用程序,这个接口说明书叫作WSDL(Web Service Description Language)。
l         通常已发布的Web Service要注册到管理服务器,这样便于使用者查询和使用。这个是通过UDDI(Universal Discovery Description and Integration)来完成的。
 

SOAP是一种基于XML的不依赖传输协议的表示层协议(参见ISO 7层参考模型,TCP/IP大致相当于传输层和网络层,HTTP相当于会话层),用来在应用程序之间方便地以对象的形式交换数据。
在SOAP的下层,可以是HTTP/HTTPS(现在用得最多),也可以是SMTP/POP3、还可以是为一些应用而专门设计的特殊通信协议。
SOAP应用系统可以两种模式工作,一种被称为RPC(Remote Procedure Call),另一种叫法不统一,在Microsoft的文档中称作document oriented,而在Apache的文档中,被称为message-oriented,这是一种可以利用XML交换更为复杂的结构数据的应用,而且,潜在地可用于B2B中长事务处理等领域。在本文中,我们将集中讨论RPC,关于后者,我希望我能够在今后的文章中为大家介绍。关于RPC的计算架构见图1.2。

 


图1.2 RPC计算架构模型
从图1.2中,我们可以看到,SOAP RPC的工作原理非常类似于WEB的请求/应答方式,无非用的是符合SOAP规范的XML代替HTML,HTTP是个无状态协议,但是今天通过Session来管理状态已经是一个众所共知的技术了,无状态协议非常适合松偶合系统,而且对于负载平衡等问题都有潜在的优势和贡献。
(1)              客户程序创建了一个XML文档,它包含了提供服务的URI、客户端请求调用的方法名和参数信息。如果参数时对象,则必须进行序列化操作。
(2)              目标服务器接收到客户程序发送的XML文档,对齐进行解析,如果参数时对象,先对其进行反序列化操作,然后执行客户端请求的方法。
(3)              目标服务器执行方法完毕后,如果方法的返回值时对象,则进行序列化操作,然后把返回值以XML文档的形式返回给客户。
(4)              客户程序收到服务器发来的XML文档,如果返回值时对象,则先进行反序列化操作,最后获取返回值。
 

XML Parser指的是XML解析器,DOM(Document Object Model)接口指的是文档对象模型接口。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值