您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > Web Service概述
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协议简介什么是SOAPSOAP指简单对象访问协议,它是一种基于XML的消息通讯格式,用于网络上,不同平台,不同语言的应用程序间的通讯。可自定义,易于扩展。一条SOAP消息就是一个普通的XML文档,包含下列元素:•Envelope元素,标识XML文档一条SOAP消息•Header元素,包含头部信息的XML标签•Body元素,包含所有的调用和响应的主体信息的标签•Fault元素,错误信息标签。以上的元素都在SOAP的命名空间中声明;SOAP的语法规则•SOAP消息必须用XML来编码•SOAP消息必须使用SOAPEnvelope命名空间•SOAP消息必须使用SOAPEncoding命名空间•SOAP消息不能包含DTD引用•SOAP消息不能包含XML处理指令SOAP消息的基本结构Java代码1.?xmlversion=1.0?2.soap:Envelope3.xmlns:soap=:encodingStyle=:Header6....7....8./soap:Header9.soap:Body10....11....12.soap:Fault13....14....15./soap:Fault16./soap:Body17./soap:EnvelopeSOAPEnvelope元素Envelope元素是SOAP消息的根元素。它指明XML文档是一个SOAP消息。它的属性xmlns:soap的值必须是。encodingStyle属性,语法:soap:encodingStyle=URIencodingStyle属性用于定义文档中使用的数据类型。此属性可出现在任何SOAP元素中,并会被应用到元素的内容及元素的所有子元素上。Java代码1.?xmlversion=1.0?2.soap:Envelope3.xmlns:soap=:encodingStyle=:EnvelopeSOAPHeader元素actor属性,语法soap:actor=URI通过沿着消息路径经过不同的端点,SOAP消息可从某个发送者传播到某个接收者。并非SOAP消息的所有部分均打算传送到SOAP消息的最终端点,不过,另一个方面,也许打算传送给消息路径上的一个或多个端点。SOAP的actor属性可被用于将Header元素寻址到一个特定的端点。mustUnderstand属性,语法soap:mustUnderstand=0|1SOAP的mustUnderstand属性可用于标识标题项对于要对其进行处理的接收者来说是强制的还是可选的。假如您向Header元素的某个子元素添加了mustUnderstand=1,则要求处理此头部的接收者必须认可此元素。Java代码1.?xmlversion=1.0?2.soap:Envelope3.xmlns:soap=:encodingStyle=:Header6.m:Trans7.xmlns:m=:mustUnderstand=19.soap:actor=“234/m:Trans10./soap:Header11....12....13./soap:EnvelopeSOAPBody元素必需的SOAPBody元素可包含打算传送到消息最终端点的实际SOAP消息。Body元素中既可以包含SOAP定义的命名空间中的元素,如Fault,也可以是用户的应用程序自定义的元素。以下是一个用户定义的请求:Java代码1.?xmlversion=1.0?2.soap:Envelope3.xmlns:soap=:encodingStyle=:Body6.m:GetPricexmlns:m=:ItemApples/m:Item8./m:GetPrice9./soap:Body10./soap:Envelope上面的例子请求苹果的价格。请注意,上面的m:GetPrice和Item元素是应用程序专用的元素。它们并不是SOAP标准的一部分。而对应的SOAP响应应该类似这样:Java代码1.?xmlversion=1.0?2.soap:Envelope3.xmlns:soap=:encodingStyle=:Body6.m:GetPriceResponsexmlns:m=:Price1.90/m:Price8./m:GetPriceResponse9./soap:Body10./soap:EnvelopeSOAPFault元素Fault元素表示SOAP的错误消息。它必须是Body元素的子元素,且在一条SOAP消息中,Fault元素只能出现一次。Fault元素拥有下列子元素:常用的SOAPFaultCodesHTTP协议中的SOAP实例下面的例子中,一个GetStockPrice请求被发送到了服务器。此请求有一个StockName参数,而在响应中则会返回一个Price参数。此功能的命名空间被定义在此地址中:SOAP请求:(注意HTTP的Head属性)Java代码1.POST/InStockHTTP/1.12.Host:=utf-84.Content-Length:XXX5.6.?xmlversion=1.0?7.soap:Envelope8.xmlns:soap=:encodingStyle=:Bodyxmlns:m=:GetStockPrice12.m:StockNameIBM/m:StockName13./m:GetStockPrice14./soap:Body15./soap:EnvelopeSOAP响应:(注意HTTP的Head属性)Java代码1.HTTP/1.1200OK2.Content-Type:application/soap+xml;charset=utf-83.Content-Length:XXX4.5.?xmlversion=1.0?6.soap:Envelope7.xmlns:soap=:encodingStyle=:Bodyxmlns:m=:GetStockPriceResponse11.m:Price34.5/m:Price12./m:GetStockPriceResponse13./soap:Body14./soap:EnvelopeHTTP协议中的SOAPRPC工作流程WSDL简介介绍过了SOAP,让我们关注WebService中另外一个重要的组成WSDL。WSDL的主要文档元素WSDL文档可以分为两部分。顶部分由抽象定义组成,而底部分则由具体描述组成。抽象部分以独立于平台和语言的方式定义SOAP消息,它们并不包含任何随机器或语言而变的元素。这就定义了一系列服务,截然不同的应用都可以实现。具体部分,如数据的序列化则归入底部分,因为它包含具体的定义。在上述的文档元素中,types、message、portType属于抽象定义层,binding、service属于具体定义层。所有的抽象可以是单独存在于别的文件中,也可以从主文档中导入。WSDL文档的结构实例解析下面我们将通过一个实际的WSDL文档例子来详细说明各标签的作用及关系。Java代码1.?xmlversion=1.0encoding=UTF-8?2.definitions3.xmlns:soap=:tns=:xsd====Example
本文标题:Web Service概述
链接地址:https://www.777doc.com/doc-6203918 .html