SOAP教程.docx
- 文档编号:23116699
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:14
- 大小:19.37KB
SOAP教程.docx
《SOAP教程.docx》由会员分享,可在线阅读,更多相关《SOAP教程.docx(14页珍藏版)》请在冰豆网上搜索。
SOAP教程
SOAP教程
SOAP是一种简单的基于XML的协议,它使应用程序通过HTTP来交换信息。
在我们的SOAP教程中,你将了解到什么是SOAP,以及它如何在应用程序之间交换信息。
SOAP简介
SOAP是基于XML的简易协议,可使应用程序在HTTP之上进行信息交换。
或者更简单地说:
SOAP是用于访问网络服务的协议。
您应当具备的基础知识
在继续学习之前,您需要对下面的知识有基本的了解:
∙XML
∙XML命名空间
如果您希望首先学习这些项目,请访问我们的《XML教程》。
什么是SOAP?
∙SOAP指简易对象访问协议
∙SOAP是一种通信协议
∙SOAP用于应用程序之间的通信
∙SOAP是一种用于发送消息的格式
∙SOAP被设计用来通过因特网进行通信
∙SOAP独立于平台
∙SOAP独立于语言
∙SOAP基于XML
∙SOAP很简单并可扩展
∙SOAP允许您绕过防火墙
∙SOAP将被作为W3C标准来发展
WhySOAP?
对于应用程序开发来说,使程序之间进行因特网通信是很重要的。
目前的应用程序通过使用远程过程调用(RPC)在诸如DCOM与CORBA等对象之间进行通信,但是HTTP不是为此设计的。
RPC会产生兼容性以及安全问题;防火墙和代理服务器通常会阻止此类流量。
通过HTTP在应用程序间通信是更好的方法,因为HTTP得到了所有的因特网浏览器及服务器的支持。
SOAP就是被创造出来完成这个任务的。
SOAP提供了一种标准的方法,使得运行在不同的操作系统并使用不同的技术和编程语言的应用程序可以互相进行通信。
Microsoft和SOAP
SOAP是微软.net架构的关键元素,用于未来的因特网应用程序开发。
SOAP1.1被提交到W3C
在2000年5月,UserLand、Ariba、CommerceOne、Compaq、Developmentor、HP、IBM、IONA、Lotus、Microsoft以及SAP向W3C提交了SOAP因特网协议,这些公司期望此协议能够通过使用因特网标准(HTTP以及XML)把图形用户界面桌面应用程序连接到强大的因特网服务器,以此来彻底变革应用程序的开发。
W3C正在发展SOAP1.2
首个关于SOAP的公共工作草案由W3C在2001年12月发布。
如需阅读更多有关在W3C的SOAP活动的内容,请访问我们的《W3C教程》。
SOAP语法
SOAP构建模块
一条SOAP消息就是一个普通的XML文档,包含下列元素:
∙必需的Envelope元素,可把此XML文档标识为一条SOAP消息
∙可选的Header元素,包含头部信息
∙必需的Body元素,包含所有的调用和响应信息
∙可选的Fault元素,提供有关在处理此消息所发生错误的信息
所有以上的元素均被声明于针对SOAP封装的默认命名空间中:
http:
//www.w3.org/2001/12/soap-envelope
以及针对SOAP编码和数据类型的默认命名空间:
http:
//www.w3.org/2001/12/soap-encoding
语法规则
这里是一些重要的语法规则:
∙SOAP消息必须用XML来编码
∙SOAP消息必须使用SOAPEnvelope命名空间
∙SOAP消息必须使用SOAPEncoding命名空间
∙SOAP消息不能包含DTD引用
∙SOAP消息不能包含XML处理指令
SOAP消息的基本结构
xmlversion="1.0"?
>
Envelope xmlns: soap="http: //www.w3.org/2001/12/soap-envelope" soap: encodingStyle="http: //www.w3.org/2001/12/soap-encoding"> Header> ... ... Header> Body> ... ... Fault> ... ... Fault> Body>
Envelope>
SOAPEnvelope元素
强制使用的SOAP的Envelope元素是SOAP消息的根元素。
SOAPEnvelope元素
必需的SOAP的Envelope元素是SOAP消息的根元素。
它可把XML文档定义为SOAP消息。
请注意xmlns:
soap命名空间的使用。
它的值应当始终是:
http:
//www.w3.org/2001/12/soap-envelope
并且它可把封装定义为SOAP封装:
xmlversion="1.0"?
>
Envelope xmlns: soap="http: //www.w3.org/2001/12/soap-envelope" soap: encodingStyle="http: //www.w3.org/2001/12/soap-encoding"> ... Messageinformationgoeshere ...
Envelope>
xmlns:
soap命名空间
SOAP消息必须拥有与命名空间"http:
//www.w3.org/2001/12/soap-envelope"相关联的一个Envelope元素。
如果使用了不同的命名空间,应用程序会发生错误,并抛弃此消息。
encodingStyle属性
SOAP的encodingStyle属性用于定义在文档中使用的数据类型。
此属性可出现在任何SOAP元素中,并会被应用到元素的内容及元素的所有子元素上。
SOAP消息没有默认的编码方式。
语法
soap:
encodingStyle="URI"
实例
xmlversion="1.0"?
>
Envelope xmlns: soap="http: //www.w3.org/2001/12/soap-envelope" soap: encodingStyle="http: //www.w3.org/2001/12/soap-encoding"> ... Messageinformationgoeshere ...
Envelope>
SOAPHeader元素
可选的SOAPHeader元素包含头部信息。
SOAPHeader元素
可选的SOAPHeader元素可包含有关SOAP消息的应用程序专用信息(比如认证、支付等)。
如果Header元素被提供,则它必须是Envelope元素的第一个子元素。
注释:
所有Header元素的直接子元素必须是合格的命名空间。
xmlversion="1.0"?
>
Envelope xmlns: soap="http: //www.w3.org/2001/12/soap-envelope" soap: encodingStyle="http: //www.w3.org/2001/12/soap-encoding"> Header> Trans xmlns: m=" soap: mustUnderstand="1">234 Trans> Header> ... ...
Envelope>
上面的例子包含了一个带有一个"Trans"元素的头部,它的值是234,此元素的"mustUnderstand"属性的值是"1"。
SOAP在默认的命名空间中("http:
//www.w3.org/2001/12/soap-envelope")定义了三个属性。
这三个属性是:
actor、mustUnderstand以及encodingStyle。
这些被定义在SOAP头部的属性可定义容器如何对SOAP消息进行处理。
actor属性
通过沿着消息路径经过不同的端点,SOAP消息可从某个发送者传播到某个接收者。
并非SOAP消息的所有部分均打算传送到SOAP消息的最终端点,不过,另一个方面,也许打算传送给消息路径上的一个或多个端点。
SOAP的actor属性可被用于将Header元素寻址到一个特定的端点。
语法
soap:
actor="URI"
实例
xmlversion="1.0"?
>
Envelope xmlns: soap="http: //www.w3.org/2001/12/soap-envelope" soap: encodingStyle="http: //www.w3.org/2001/12/soap-encoding"> Header> Trans xmlns: m=" soap: actor=" 234 Trans> Header> ... ...
Envelope>
mustUnderstand属性
SOAP的mustUnderstand属性可用于标识标题项对于要对其进行处理的接收者来说是强制的还是可选的。
假如您向Header元素的某个子元素添加了"mustUnderstand="1",则它可指示处理此头部的接收者必须认可此元素。
假如此接收者无法认可此元素,则在处理此头部时必须失效。
语法
soap:
mustUnderstand="0|1"
实例
xmlversion="1.0"?
>
Envelope xmlns: soap="http: //www.w3.org/2001/12/soap-envelope" soap: encodingStyle="http: //www.w3.org/2001/12/soap-encoding"> Header> Trans xmlns: m=" soap: mustUnderstand="1"> 234 Trans> Header> ... ...
Envelope>
encodingStyle属性
SOAP的encodingStyle属性在上一节中已解释过了。
SOAPBody元素
强制使用的SOAPBody元素包含实际的SOAP消息。
SOAPBody元素
必需的SOAPBody元素可包含打算传送到消息最终端点的实际SOAP消息。
SOAPBody元素的直接子元素可以是合格的命名空间。
SOAP在默认的命名空间中("http:
//www.w3.org/2001/12/soap-envelope")定义了Body元素内部的一个元素。
即SOAP的Fault元素,用于指示错误消息。
xmlversion="1.0"?
>
Envelope xmlns: soap="http: //www.w3.org/2001/12/soap-envelope" soap: encodingStyle="http: //www.w3.org/2001/12/soap-encoding"> Body> GetPricexmlns: m=" Item>Apples Item> GetPrice> Body>
Envelope>
上面的例子请求苹果的价格。
请注意,上面的m:
GetPrice和Item元素是应用程序专用的元素。
它们并不是SOAP标准的一部分。
而一个SOAP响应应该类似这样:
xmlversion="1.0"?
>
Envelope xmlns: soap="http: //www.w3.org/2001/12/soap-envelope" soap: encodingStyle="http: //www.w3.org/2001/12/soap-encoding"> Body> GetPriceResponsexmlns: m=" Price>1.90 Price> GetPriceResponse> Body>
Envelope>
SOAPFault元素
SOAPFault元素用于存留SOAP消息的错误和状态信息。
SOAPFault元素
可选的SOAPFault元素用于指示错误消息。
如果已提供了Fault元素,则它必须是Body元素的子元素。
在一条SOAP消息中,Fault元素只能出现一次。
SOAP的Fault元素拥有下列子元素:
子元素
描述
供识别故障的代码
可供人阅读的有关故障的说明
有关是谁引发故障的信息
存留涉及Body元素的应用程序专用错误信息
SOAPFault代码
在下面定义的faultcode值必须用于描述错误时的faultcode元素中:
错误
描述
VersionMismatch
SOAPEnvelope元素的无效命名空间被发现
MustUnderstand
Header元素的一个直接子元素(带有设置为"1"的mustUnderstand属性)无法被理解。
Client
消息被不正确地构成,或包含了不正确的信息。
Server
服务器有问题,因此无法处理进行下去。
SOAPHTTPBinding
HTTP协议
HTTP在TCP/IP之上进行通信。
HTTP客户机使用TCP连接到HTTP服务器。
在建立连接之后,客户机可向服务器发送HTTP请求消息:
POST/itemHTTP/1.1
Host:
189.123.345.239
Content-Type:
text/plain
Content-Length:
200
随后服务器会处理此请求,然后向客户机发送一个HTTP响应。
此响应包含了可指示请求状态的状态代码:
200OK
Content-Type:
text/plain
Content-Length:
200
在上面的例子中,服务器返回了一个200的状态代码。
这是HTTP的标准成功代码。
假如服务器无法对请求进行解码,它可能会返回类似这样的信息:
400BadRequest
Content-Length:
0
SOAPHTTPBinding
SOAP方法指的是遵守SOAP编码规则的HTTP请求/响应。
HTTP+XML=SOAP
SOAP请求可能是HTTPPOST或HTTPGET请求。
HTTPPOST请求规定至少两个HTTP头:
Content-Type和Content-Length。
Content-Type
SOAP的请求和响应的Content-Type头可定义消息的MIME类型,以及用于请求或响应的XML主体的字符编码(可选)。
语法
Content-Type:
MIMEType;charset=character-encoding
例子
POST/itemHTTP/1.1
Content-Type:
application/soap+xml;charset=utf-8
Content-Length
SOAP的请求和响应的Content-Length头规定请求或响应主体的字节数。
语法
Content-Length:
bytes
例子
POST/itemHTTP/1.1
Content-Type:
application/soap+xml;charset=utf-8
Content-Length:
250
SOAP实例
一个SOAP实例
在下面的例子中,一个GetStockPrice请求被发送到了服务器。
此请求有一个StockName参数,而在响应中则会返回一个Price参数。
此功能的命名空间被定义在此地址中:
"http:
//www.example.org/stock"
SOAP请求:
POST/InStockHTTP/1.1
Host:
www.example.org
Content-Type:
application/soap+xml;charset=utf-8
Content-Length:
nnn
xmlversion="1.0"?
>
Envelope xmlns: soap="http: //www.w3.org/2001/12/soap-envelope" soap: encodingStyle="http: //www.w3.org/2001/12/soap-encoding"> Bodyxmlns: m="http: //www.example.org/stock"> GetStockPrice> StockName>IBM StockName> GetStockPrice> Body>
Envelope>
SOAP响应:
HTTP/1.1200OK
Content-Type:
application/soap+xml;charset=utf-8
Content-Length:
nnn
xmlversion="1.0"?
>
Envelope xmlns: soap="http: //www.w3.org/2001/12/soap-envelope" soap: encodingStyle="http: //www.w3.org/2001/12/soap-encoding"> Bodyxmlns: m="http: //www.example.org/stock"> GetStockPriceResponse> Price>34.5 Price> GetStockPriceResponse> Body>
Envelope>
您已经学习了SOAP,下一步呢?
SOAP概要
此教程已向您讲解了如何透过HTTP使用SOAP在应用程序之间交换信息。
您已经学习了有关SOAP消息中不同元素和属性的知识。
您也学习了如何把SOAP作为一种协议来使用以访问webservice。
您已经学习了SOAP,下一步呢?
下一步应该学习WSDL和WebServices。
WSDL
WSDL是基于XML的语言,用于描述Webservices以及如何访问它们。
WSDL可描述某个webservice,连同用于此webservice的消息格式和协议细节。
如果您需要学习更多有关WSDL的知识,请访问我们的WSDL教程。
WebServices
Webservices可把应用程序转换为网络应用程序(web-applications)。
通过使用XML,消息可在应用程序之间进行传送。
如果您需要学习更多有关webservices的知识,请访问我们的WebServices教程。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SOAP 教程
![提示](https://static.bdocx.com/images/bang_tan.gif)