1、Web Service入门教程 Web Service概述Web Service的定义W3C组织对其的定义如下,它是一个软件系统,为了支持跨网络的机器间相互操作交互而设计。Web Service服务通常被定义为一组模块化的API,它们可以通过网络进行调用,来执行远程系统的请求服务。这里我们从一个程序员的视角来观察web service。在传统的程序编码中,存在这各种的函数方法调用。通常,我们知道一个程序模块M中的方法A,向其发出调用请求,并传入A方法需要的参数P,方法A执行完毕后,返回处理结果R。这种函数或方法调用通常发生在同一台机器上的同一程序语言环境下。现在的我们需要一种能够在不同计算机间
2、的不同语言编写的应用程序系统中,通过网络通讯实现函数和方法调用的能力,而Web service正是应这种需求而诞生的。最普遍的一种说法就是,Web Service = SOAP + HTTP + WSDL。其中,SOAP Simple Object Access Protocol)协议是web service的主体,它通过HTTP或者SMTP等应用层协议进行通讯,自身使用XML文件来描述程序的函数方法和参数信息,从而完成不同主机的异构系统间的计算服务处理。这里的WSDL(Web Services Description Language)web 服务描述语言也是一个XML文档,它通过HTTP向
3、公众发布,公告客户端程序关于某个具体的 Web service服务的URL信息、方法的命名,参数,返回值等。下面,我们先来熟悉一下SOAP协议,看看它是如何描述程序中的函数方法、参数及结果对象的。SOAP协议简介什么是SOAPSOAP 指简单对象访问协议,它是一种基于XML的消息通讯格式,用于网络上,不同平台,不同语言的应用程序间的通讯。可自定义,易于扩展。一条 SOAP 消息就是一个普通的 XML 文档,包含下列元素:Envelope 元素,标识XML 文档一条 SOAP 消息Header 元素,包含头部信息的XML标签Body 元素,包含所有的调用和响应的主体信息的标签Fault 元素,错
4、误信息标签。以上的元素都在 SOAP的命名空间http:/www.w3.org/2001/12/soap-envelope中声明;SOAP的语法规则SOAP 消息必须用 XML 来编码SOAP 消息必须使用 SOAP Envelope 命名空间SOAP 消息必须使用 SOAP Encoding 命名空间SOAP 消息不能包含 DTD 引用SOAP 消息不能包含 XML 处理指令SOAP 消息的基本结构XML/HTML代码1. 2. 5. 6. .7. .8. 9. 10. .11. .12. 13. .14. .15. 16. 17. SOAP Envelope 元素Envelope 元素是
5、SOAP 消息的根元素。它指明 XML 文档是一个SOAP 消息。它的属性 xmlns:soap的值必须是http:/www.w3.org/2001/12/soap-envelope。encodingStyle 属性,语法:soap:encodingStyle=URIencodingStyle 属性用于定义文档中使用的数据类型。此属性可出现在任何 SOAP 元素中,并会被应用到元素的内容及元素的所有子元素上。XML/HTML代码1. 2. 5. .6. Messageinformationgoeshere7. .8. SOAP Header 元素actor 属性,语法soap:actor=UR
6、I通过沿着消息路径经过不同的端点,SOAP 消息可从某个发送者传播到某个接收者。并非 SOAP 消息的所有部分均打算传送到 SOAP 消息的最终端点,不过,另一个方面,也许打算传送给消息路径上的一个或多个端点。SOAP 的 actor 属性可被用于将 Header 元素寻址到一个特定的端点。mustUnderstand 属性 ,语法soap:mustUnderstand=0|1SOAP 的 mustUnderstand 属性可用于标识标题项对于要对其进行处理的接收者来说是强制的还是可选的。假如您向 Header 元素的某个子元素添加了 mustUnderstand=1,则要求处理此头部的接收者
7、必须认可此元素。XML/HTML代码1. 2. 5. 6. 23410. 11. .12. .13. SOAP Body 元素必需的 SOAP Body 元素可包含打算传送到消息最终端点的实际 SOAP 消息。Body元素中既可以包含SOAP定义的命名空间中的元素,如Fault,也可以是用户的应用程序自定义的元素。以下是一个用户定义的请求:XML/HTML代码1. 2. 5. 6. m:GetPricexmlns:m=7. Apples8. 9. 10. 上面的例子请求苹果的价格。请注意,上面的 m:GetPrice 和 Item 元素是应用程序专用的元素。它们并不是 SOAP 标准的一部分。
8、而对应的 SOAP 响应应该类似这样:SOAP Fault 元素Fault 元素表示 SOAP的错误消息。它必须是 Body 元素的子元素,且在一条 SOAP 消息中,Fault 元素只能出现一次。Fault 元素拥有下列子元素:常用的SOAP Fault CodesHTTP协议中的SOAP 实例下面的例子中,一个 GetStockPrice 请求被发送到了服务器。此请求有一个 StockName 参数,而在响应中则会返回一个 Price 参数。此功能的命名空间被定义在此地址中: SOAP 请求:(注意HTTP的Head属性)XML/HTML代码1. POST/InStockHTTP/1.12
9、. Host:3. Content-Type:application/soap+xml;charset=utf-84. Content-Length:XXX5. 6. 7. 10. soap:Bodyxmlns:m=11. 12. IBM13. 14. 15. SOAP 响应:(注意HTTP的Head属性)XML/HTML代码1. HTTP/1.1200OK2. Content-Type:application/soap+xml;charset=utf-83. Content-Length:XXX4. 5. 6. 9. soap:Bodyxmlns:m=10. 11. 34.512. 13.
10、14. HTTP协议中的SOAP RPC工作流程WSDL简介介绍过了SOAP,让我们关注Web Service中另外一个重要的组成WSDL。WSDL的主要文档元素WSDL文档可以分为两部分。顶部分由抽象定义组成,而底部分则由具体描述组成。抽象部分以独立于平台和语言的方式定义SOAP消息,它们并不包含任何随机器或语言而变的元素。这就定义了一系列服务,截然不同的应用都可以实现。具体部分,如数据的序列化则归入底部分,因为它包含具体的定义。在上述的文档元素中,、属于抽象定义层,、属于具体定义层。所有的抽象可以是单独存在于别的文件中,也可以从主文档中导入。WSDL文档的结构实例解析下面我们将通过一个实际
11、的WSDL文档例子来详细说明各标签的作用及关系。XML/HTML代码1. 2. 9. 10. 11. 12. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 52. 53. 54. 55. soap:bodyuse=literal56. namespace=57. 58. 59. soap:bodyuse=literal60. namespace=61. 62. 6
12、3. 64. 65. 66. soap:bodyuse=literal67. namespace=68. 69. 70. soap:bodyuse=literal71. namespace=72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 由于上面的事例XML较长,我们将其逐段分解讲解WSDL文档的根元素:definitionsXML/HTML代码1. 8. 9. 10. definitions定义了文档中用到的各个xml元素的namespace缩写,也界定了本文档自己的targetNamespace=引用WSDL文档数据类型定义元素:XM
13、L/HTML代码1. 2. 3. 6. 7. 标签定义了当前的WSDL文档用到的数据类型。要说明的是,为了最大程度的平台中立性,WSDL 使用 XML Schema 语法来定义数据类型。这些数据类型用来定义web service方法的参数和返回指。对于通用的原生数据类型如:integer , boolean , char , float等,在W3C的标准文档http:/www.w3.org/2001/XMLSchema中已经做了定义。这里我们要引入的schema定义schemaLocation=http:/localhost:8080/hello?xsd=1是我们自定义的Java对象类型。WSDL文档消息体定义元素:XML/HTML代码1. 2. 3. 4. 5. 6
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1