Web Service学习笔记.docx
- 文档编号:12255200
- 上传时间:2023-04-17
- 格式:DOCX
- 页数:56
- 大小:155.85KB
Web Service学习笔记.docx
《Web Service学习笔记.docx》由会员分享,可在线阅读,更多相关《Web Service学习笔记.docx(56页珍藏版)》请在冰豆网上搜索。
WebService学习笔记
WebService概述
WebService的定义
W3C组织对其的定义如下,它是一个软件系统,为了支持跨网络的机器间相互操作交互而设计。
WebService服务通常被定义为一组模块化的API,它们可以通过网络进行调用,来执行远程系统的请求服务。
这里我们从一个程序员的视角来观察webservice。
在传统的程序编码中,存在这各种的函数方法调用。
通常,我们知道一个程序模块M中的方法A,向其发出调用请求,并传入A方法需要的参数P,方法A执行完毕后,返回处理结果R。
这种函数或方法调用通常发生在同一台机器上的同一程序语言环境下。
现在的我们需要一种能够在不同计算机间的不同语言编写的应用程序系统中,通过网络通讯实现函数和方法调用的能力,而Webservice正是应这种需求而诞生的。
最普遍的一种说法就是,WebService=SOAP+HTTP+WSDL。
其中,SOAPSimpleObjectAccessProtocol)协议是webservice的主体,它通过HTTP或者SMTP等应用层协议进行通讯,自身使用XML文件来描述程序的函数方法和参数信息,从而完成不同主机的异构系统间的计算服务处理。
这里的WSDL(WebServicesDescriptionLanguage)web服务描述语言也是一个XML文档,它通过HTTP向公众发布,公告客户端程序关于某个具体的Webservice服务的URL信息、方法的命名,参数,返回值等。
下面,我们先来熟悉一下SOAP协议,看看它是如何描述程序中的函数方法、参数及结果对象的。
SOAP协议简介
什么是SOAP
SOAP指简单对象访问协议,它是一种基于XML的消息通讯格式,用于网络上,不同平台,不同语言的应用程序间的通讯。
可自定义,易于扩展。
一条SOAP消息就是一个普通的XML文档,包含下列元素:
?
Envelope元素,标识XML文档一条SOAP消息
?
Header元素,包含头部信息的XML标签
?
Body元素,包含所有的调用和响应的主体信息的标签
?
Fault元素,错误信息标签。
以上的元素都在SOAP的命名空间http:
//www.w3.org/2001/12/soap-envelope中声明;
SOAP的语法规则
?
SOAP消息必须用XML来编码
?
SOAP消息必须使用SOAPEnvelope命名空间
?
SOAP消息必须使用SOAPEncoding命名空间
?
SOAP消息不能包含DTD引用
?
SOAP消息不能包含XML处理指令
SOAP消息的基本结构
Java代码
1.
xmlversion="1.0"?
>
2. Envelope 3.xmlns: soap="http: //www.w3.org/2001/12/soap-envelope" 4.soap: encodingStyle="http: //www.w3.org/2001/12/soap-encoding"> 5. Header> 6.... 7.... 8. Header> 9. Body> 10.... 11.... 12. Fault> 13.... 14.... 15. Fault> 16. Body> 17.
Envelope>
[java]viewplaincopyprint?
1.
xmlversion="1.0"?
>
2. Envelope 3.xmlns: soap="http: //www.w3.org/2001/12/soap-envelope" 4.soap: encodingStyle="http: //www.w3.org/2001/12/soap-encoding"> 5. Header> 6.... 7.... 8. Header> 9. Body> 10.... 11.... 12. Fault> 13.... 14.... 15. Fault> 16. Body> 17.
Envelope>
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元素
Envelope元素是SOAP消息的根元素。
它指明XML文档是一个SOAP消息。
它的属性xmlns:
soap的值必须是http:
//www.w3.org/2001/12/soap-envelope。
?
encodingStyle属性,语法:
soap:
encodingStyle="URI"
encodingStyle属性用于定义文档中使用的数据类型。
此属性可出现在任何SOAP元素中,并会被应用到元素的内容及元素的所有子元素上。
Java代码
1.
xmlversion="1.0"?
>
2. Envelope 3.xmlns: soap="http: //www.w3.org/2001/12/soap-envelope" 4.soap: encodingStyle="http: //www.w3.org/2001/12/soap-encoding"> 5.... 6.Messageinformationgoeshere 7.... 8.
Envelope>
[java]viewplaincopyprint?
1.
xmlversion="1.0"?
>
2. Envelope 3.xmlns: soap="http: //www.w3.org/2001/12/soap-envelope" 4.soap: encodingStyle="http: //www.w3.org/2001/12/soap-encoding"> 5.... 6.Messageinformationgoeshere 7.... 8.
Envelope>
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元素
∙actor属性,语法soap:
actor="URI"
通过沿着消息路径经过不同的端点,SOAP消息可从某个发送者传播到某个接收者。
并非SOAP消息的所有部分均打算传送到SOAP消息的最终端点,不过,另一个方面,也许打算传送给消息路径上的一个或多个端点。
SOAP的actor属性可被用于将Header元素寻址到一个特定的端点。
∙mustUnderstand属性,语法soap:
mustUnderstand="0|1"
SOAP的mustUnderstand属性可用于标识标题项对于要对其进行处理的接收者来说是强制的还是可选的。
假如您向Header元素的某个子元素添加了"mustUnderstand="1",则要求处理此头部的接收者必须认可此元素。
Java代码
1.
xmlversion="1.0"?
>
2. Envelope 3.xmlns: soap="http: //www.w3.org/2001/12/soap-envelope" 4.soap: encodingStyle="http: //www.w3.org/2001/12/soap-encoding"> 5. Header> 6. Trans 7.xmlns: m=" 8.soap: mustUnderstand="1" 9.soap: actor="“>234 Trans> 10. Header> 11.... 12.... 13.
Envelope>
[java]viewplaincopyprint?
1.
xmlversion="1.0"?
>
2. Envelope 3.xmlns: soap="http: //www.w3.org/2001/12/soap-envelope" 4.soap: encodingStyle="http: //www.w3.org/2001/12/soap-encoding"> 5. Header> 6. Trans 7.xmlns: m=" 8.soap: mustUnderstand="1" 9.soap: actor="“>234 Trans> 10. Header> 11.... 12.... 13.
Envelope>
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" soap: actor="“>234 Trans> Header> ... ...
Envelope>
SOAPBody元素
必需的SOAPBody元素可包含打算传送到消息最终端点的实际SOAP消息。
Body元素中既可以包含SOAP定义的命名空间中的元素,如Fault,也可以是用户的应用程序自定义的元素。
以下是一个用户定义的请求:
Java代码
1.
xmlversion="1.0"?
>
2. Envelope 3.xmlns: soap="http: //www.w3.org/2001/12/soap-envelope" 4.soap: encodingStyle="http: //www.w3.org/2001/12/soap-encoding"> 5. Body> 6. GetPricexmlns: m=" 7. Item>Apples Item> 8. GetPrice> 9. Body> 10.
Envelope>
[java]viewplaincopyprint?
1.
xmlversion="1.0"?
>
2. Envelope 3.xmlns: soap="http: //www.w3.org/2001/12/soap-envelope" 4.soap: encodingStyle="http: //www.w3.org/2001/12/soap-encoding"> 5. Body> 6. GetPricexmlns: m=" 7. Item>Apples Item> 8. GetPrice> 9. Body> 10.
Envelope>
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响应应该类似这样:
Java代码
1.
xmlversion="1.0"?
>
2. Envelope 3.xmlns: soap="http: //www.w3.org/2001/12/soap-envelope" 4.soap: encodingStyle="http: //www.w3.org/2001/12/soap-encoding"> 5. Body> 6. GetPriceResponsexmlns: m=" 7. Price>1.90 Price> 8. GetPriceResponse> 9. Body> 10.
Envelope>
[java]viewplaincopyprint?
1.
xmlversion="1.0"?
>
2. Envelope 3.xmlns: soap="http: //www.w3.org/2001/12/soap-envelope" 4.soap: encodingStyle="http: //www.w3.org/2001/12/soap-encoding"> 5. Body> 6. GetPriceResponsexmlns: m=" 7. Price>1.90 Price> 8. GetPriceResponse> 9. Body> 10.
Envelope>
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元素
Fault元素表示SOAP的错误消息。
它必须是Body元素的子元素,且在一条SOAP消息中,Fault元素只能出现一次。
Fault元素拥有下列子元素:
常用的SOAPFaultCodes
HTTP协议中的SOAP实例
下面的例子中,一个GetStockPrice请求被发送到了服务器。
此请求有一个StockName参数,而在响应中则会返回一个Price参数。
此功能的命名空间被定义在此地址中:
"
∙SOAP请求:
(注意HTTP的Head属性)
Java代码
1.POST/InStockHTTP/1.1
2.Host:
3.Content-Type:
application/soap+xml;charset=utf-8
4.Content-Length:
XXX
5.
6.
xmlversion="1.0"?
>
7. Envelope 8.xmlns: soap="http: //www.w3.org/2001/12/soap-envelope" 9.soap: encodingStyle="http: //www.w3.org/2001/12/soap-encoding"> 10. Bodyxmlns: m=" 11. GetStockPrice> 12. StockName>IBM StockName> 13. GetStockPrice> 14. Body> 15.
Envelope>
[java]viewplaincopyprint?
1.POST/InStockHTTP/1.1
2.Host:
3.Content-Type:
application/soap+xml;charset=utf-8
4.Content-Length:
XXX
5.
6.
xmlversion="1.0"?
>
7. Envelope 8.xmlns: soap="http: //www.w3.org/2001/12/soap-envelope" 9.soap: encodingStyle="http: //www.w3.org/2001/12/soap-encoding"> 10. Bodyxmlns: m=" 11. GetStockPrice> 12. StockName>IBM StockName> 13. GetStockPrice> 14. Body> 15.
Envelope>
POST/InStockHTTP/1.1
Host:
Content-Type:
application/soap+xml;charset=utf-8
Content-Length:
XXX
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=" GetStockPrice> StockName>IBM StockName> GetStockPrice> Body>
Envelope>
∙SOAP响应:
(注意HTTP的Head属性)
Java代码
1.HTTP/1.1200OK
2.Content-Type:
application/soap+xml;charset=utf-8
3.Content-Length:
XXX
4.
5.
xmlversion="1.0"?
>
6. Envelope 7.xmlns: soap="http: //www.w3.org/2001/12/soap-envelope" 8.soap: encodingStyle="http: //www.w3.org/2001/12/soap-encoding"> 9. Bodyxmlns: m=" 10. GetStockPriceResponse> 11. Price>34.5 Price> 12. GetStockPriceResponse> 13. Body> 14.
Envelope>
[java]viewplaincopyprint?
1.HTTP/1.1200OK
2.Content-Type:
application/soap+xml;charset=utf-8
3.Content-Length:
XXX
4.
5.
xmlversion="1.0"?
>
6. Envelope 7.xmlns: soap="http: //www.w3.org/2001/12/soap-envelope" 8.soap: encodingStyle="http: //www.w3.org/2001/12/soap-encoding"> 9. Bodyxmlns: m=" 10. GetStockPriceResponse> 11. Price>34.5 Price> 12. GetStockPriceResponse> 13. Body> 14.
Envelope>
HTTP/1.1200OK
Content-Type:
application/soap+xml;charse
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Web Service学习笔记 Service 学习 笔记
![提示](https://static.bdocx.com/images/bang_tan.gif)