SOAP协议

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

SOAP协议SOAP简介SOAP以XML形式提供了一个简单、轻量的用于在分散或分布环境中交换结构化和类型信息的机制。XML的标准化为平台之间的交流带来了极大的方便,而SOAP的实质就是把这种交流的方式标准化。SOAP本身并没有定义任何应用程序语义,如编程模型或特定语义的实现;实际上它通过提供一个有标准组件的包模型和在模块中编码数据的机制,定义了一个简单的表示应用程序语义的机制。这使SOAP能够被用于从消息传递到RPC的各种系统。SOAP采用了已经广泛使用的两个协议:HTTP和XML(标准通用标记语言下的一个子集)。HTTP用于实现SOAP的RPC风格的传输,而XML是它的编码模式。采用几行代码和一个XML解析器,HTTP服务器(MS的IIS或Apache)立刻成为SOAP的ORBS。SOAP通讯协议使用HTTP来发送XML格式的信息。HTTP与RPC的协议很相似,它简单、配置广泛,并且对防火墙比其它协议更容易发挥作用。HTTP请求一般由Web服务器软件(如IIS和Apache)来处理,但越来越多的应用服务器产品正在支持HTTP。XML作为一个更好的网络数据表达方式(NDR)。SOAP把XML的使用代码化为请求和响应参数编码模式,并用HTTP作传输。具体地讲,一个SOAP方法可以简单地看作遵循SOAP编码规则的HTTP请求和响应,一个SOAP终端则可以看作一个基于HTTP的URL,它用来识别方法调用的目标。像CORBA/IIOP一样,SOAP不需要具体的对象绑定到一个给定的终端,而是由具体实现程序来决定怎样把对象终端标识符映像到服务器端的对象。SOAP包括三个部分•SOAP封装:结构定义了一个整体框架用来表示消息中包含什么内容,谁来处理这些内容以及这些内容是可选的或是必需的。•SOAP编码规则:定义了用以交换应用程序定义的数据类型的实例的一系列机制。•SOAPRPC表示:定义了一个用来表示远程过程调用和应答的协定。虽然这三个部分都作为SOAP的一部分一起描述,但它们在功能上是相交的。特别的,封装和编码规则是在不同的名域中定义的,这种模块性的定义方法增加了简单性。在SOAP封装,SOAP编码规则和SOAPRPC协定之外,这个规范还定义了两个协议的绑定,描述了在有或没有HTTP扩展框架的情况下,SOAP消息如何包含在HTTP消息中被传送。SOAP语法SOAP构建模块一条SOAP消息就是一个普通的XML文档,包含下列元素:必需的Envelope元素,可把此XML文档标识为一条SOAP消息可选的Header元素,包含头部信息必需的Body元素,包含所有的调用和响应信息可选的Fault元素,提供有关在处理此消息所发生错误的信息所有以上的元素均被声明于针对SOAP封装的默认命名空间中:以及针对SOAP编码和数据类型的默认命名空间:消息的基本结构?xmlversion=1.0?soap:Envelopexmlns:soap=:encodingStyle=:Header....../soap:Headersoap:Body......soap:Fault....../soap:Fault/soap:Body/soap:EnvelopeSOAPEnvelope元素必需的SOAP的Envelope元素是SOAP消息的根元素。它可把XML文档定义为SOAP消息。请注意xmlns:soap命名空间的使用。它的值应当始终是:并且它可把封装定义为SOAP封装:?xmlversion=1.0?soap:Envelopexmlns:soap=:encodingStyle=:Envelopexmlns:soap命名空间SOAP消息必须拥有与命名空间相关联的一个Envelope元素。如果使用了不同的命名空间,应用程序会发生错误,并抛弃此消息。encodingStyle属性SOAP的encodingStyle属性用于定义在文档中使用的数据类型。此属性可出现在任何SOAP元素中,并会被应用到元素的内容及元素的所有子元素上。SOAP消息没有默认的编码方式。语法soap:encodingStyle=URI实例?xmlversion=1.0?soap:Envelopexmlns:soap=:encodingStyle=:EnvelopeOAPHeader元素可选的SOAPHeader元素可包含有关SOAP消息的应用程序专用信息(比如认证、支付等)。如果Header元素被提供,则它必须是Envelope元素的第一个子元素。注释:所有Header元素的直接子元素必须是合格的命名空间。?xmlversion=1.0?soap:Envelopexmlns:soap=:encodingStyle=:Headerm:Transxmlns:m=:mustUnderstand=1234/m:Trans/soap:Header....../soap:Envelope上面的例子包含了一个带有一个Trans元素的头部,它的值是234,此元素的mustUnderstand属性的值是1。SOAP在默认的命名空间中()定义了三个属性。这三个属性是:actor、mustUnderstand以及encodingStyle。这些被定义在SOAP头部的属性可定义容器如何对SOAP消息进行处理。actor属性通过沿着消息路径经过不同的端点,SOAP消息可从某个发送者传播到某个接收者。并非SOAP消息的所有部分均打算传送到SOAP消息的最终端点,不过,另一个方面,也许打算传送给消息路径上的一个或多个端点。SOAP的actor属性可被用于将Header元素寻址到一个特定的端点。语法soap:actor=URI实例?xmlversion=1.0?soap:Envelopexmlns:soap=:encodingStyle=:Headerm:Transxmlns:m=:actor=:Trans/soap:Header....../soap:EnvelopemustUnderstand属性SOAP的mustUnderstand属性可用于标识标题项对于要对其进行处理的接收者来说是强制的还是可选的。假如您向Header元素的某个子元素添加了mustUnderstand=1,则它可指示处理此头部的接收者必须认可此元素。假如此接收者无法认可此元素,则在处理此头部时必须失效。语法soap:mustUnderstand=0|1实例?xmlversion=1.0?soap:Envelopexmlns:soap=:encodingStyle=:Headerm:Transxmlns:m=:mustUnderstand=1234/m:Trans/soap:Header....../soap:EnvelopeencodingStyle属性SOAP的encodingStyle属性在上一节中已解释过了。SOAPBody元素必需的SOAPBody元素可包含打算传送到消息最终端点的实际SOAP消息。SOAPBody元素的直接子元素可以是合格的命名空间。SOAP在默认的命名空间中()定义了Body元素内部的一个元素。即SOAP的Fault元素,用于指示错误消息。?xmlversion=1.0?soap:Envelopexmlns:soap=:encodingStyle=:Bodym:GetPricexmlns:m=:ItemApples/m:Item/m:GetPrice/soap:Body/soap:Envelope上面的例子请求苹果的价格。请注意,上面的m:GetPrice和Item元素是应用程序专用的元素。它们并不是SOAP标准的一部分。而一个SOAP响应应该类似这样:?xmlversion=1.0?soap:Envelopexmlns:soap=:encodingStyle=:Bodym:GetPriceResponsexmlns:m=:Price1.90/m:Price/m:GetPriceResponse/soap:Body/soap:EnvelopeSOAPFault元素可选的SOAPFault元素用于指示错误消息。如果已提供了Fault元素,则它必须是Body元素的子元素。在一条SOAP消息中,Fault元素只能出现一次。SOAP的Fault元素拥有下列子元素:子元素描述faultcode供识别故障的代码faultstring可供人阅读的有关故障的说明faultactor有关是谁引发故障的信息detail存留涉及Body元素的应用程序专用错误信息SOAPFault代码在下面定义的faultcode值必须用于描述错误时的faultcode元素中:错误描述VersionMismatchSOAPEnvelope元素的无效命名空间被发现MustUnderstandHeader元素的一个

1 / 11
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功