什么是WebService?
WebService用于解决什么问题?1. 不同语言编写的系统之间需要交互WebService如何解决这些问题?1. 使用XML,信息的表示和服务的表示都使用XML2. 使用HTTP,HTTP协议可以跨过多个防火墙3. 使用SOAP消息,SOAP消息使用XML语言,独立于具体的编程语言4. 使用WSDL描述服务,XML格式的文档,独立于特定的语言5. 使用UDDI,用于发布和发现服务什么是WSDL(Web Service Description Language),用于描述服务提供者能够提供的服务以及如何访问这些服务,如何解析服务提供者返回的执行结果。WSDL文档结构:1. 类型定义,定义方法调用时候参数和返回值的类型2. 消息定义,定义请求和响应时候的消息结构3. 端口类型定义,端口中包含多个操作,每个操作包括请求信息和响应信息格式4. 绑定定义,把操作与具体的SOAP消息格式关联起来5. 服务定义,把服务的地址与绑定关联起来<?xml version="1.0" encoding="UTF-8"?><definions. ..><type>...</types><message name="add">...</message><portType name="CalculationDelegate">...</portType><binding name="CalculationPortBinding" type="tns:CalculatorDelegate">...</binding><service name="CalculatorService">...</service></definitions>类型定义:定义各种操作中使用的参数和返回值。使用types元素,types元素中可以定义多个类型。<xs:complexType name="add"> <xs:sequence> <xs:element name="arg0" type="xs:int"/> <xs:element name="arg1" type="xs:int"/> </xs:sequence></xs:complexType><xs:element name="add" type="tns:add"/>message定义:message定义了消息的数据结构。message元素包含了一组Part元素。<part>元素的类型可以是XSD基本类型,也可以是SOAP定义类型、WSDL定义类型(WSDL)或是Types中定义的类型。<message name="add"> <part element="tns:add" name="parameters"/></message>定义端口类型一个PortType可以包含若干个Operationoperation是对服务中所支持的操作的抽象描述,描述了请求和响应信息的格式。<portType name="CalculatorDelegate"> <operation name="add"> <input message="tns:add"/> <output message="tns:addResponse"> </operation> ...</portType>定义绑定绑定部分定义了端口类型与具体的网络传输协议或消息交互协议的绑定,以及具体的数据格式规范。绑定使用bindings元素定义,可以有零个、一个或者多个<binding>元素。每个<operation>描述输入通过网络调用和响应<binding name="CalculatorPortBinding" type="tns:CalculatorDelegate"><soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/><!-- 具体操作 --><operation name="add"> <soap:operation soapAction=""/> <input> <soap:body use="literal"/> </input> <output> <soap:body use="literal"/> </output></operation>...</binding>定义Service服务部分描述的是具体的被部署的Web服务所提供的所有访问入口的部署细节,一个Service往往有多个服务访问入口(Port)。Port描述的是一个服务访问入口的部署细节。<service name="CalculatorService"> <port binding="tns:CalculatorPortBinding" name="CalculatorPort"> <soap:address location="http://localhost:7001/webServiceP/CalculatorPort"/> </port></service>SOAP什么是SOAP(Simple Object Access Protocol)定义了一种消息格式。通信双方可以根据该格式封装消息和交换信息。SOAP基于XML语言,使用XML作为SOAP消息的基础使得任何实现基本的Internet通信服务的系统都能处理和传送这类消息。SOAP协议只是定义了一种消息格式,它并没有为交换消息而强加某种特定的传送协议,因此可采用HTTP、FTP和SMTP等协议来传送消息。SOAP消息实例<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelop/" xmlns:q0="http://service/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" mlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soapenv:Body><q0:add> <arg0>22</arg0> <arg1>111</arg1></q0:add></soapenv:Body></soapenv:Envelop>为什么使用SOAPSOAP可以很好的与HTTP协议结合SOAP提供了一种标准的方法,它使用XML文档封装请求信息和响应信息,使得允许在不同的操作系统并使用不同的技术和编程语言的应用程序可以互相进行通信。SOAP消息组成一条SOAP消息就是一个普通的XML文档,包含下列元素:必需的Envelop元素,可把此XML文档标识为一条SOAP消息可选的Header元素,包含头部信息必需的Body元素,包含所有的调用和响应信息可选的Fault元素,提供有关在处理此消息所发生错误的信息SOAP Envelope元素SOAP的Envelope元素是SOAP消息的根元素。xmlns:soap的命名空间为http://www.w3.org/2001/12/soap-envelopeSOAP的encodingStyle属性用于定义在文档中使用的数据类型。此属性可出现在任何SOAP元素中,并会被应用到元素的内容及元素的所有子元素上。SOAP消息没有默认的编码方式。<?xml version="1.0"?><soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> </soap:Envelope>SOAP Header元素SOAP Header元素封装了应用程序专用信息(比如认证、支付等),如果没有特殊要求可以不用Header元素,如果有Header元素,则它必须是Envelope元素的第一个子元素。<soap:Header><m:Trans xmlns:m = "http://www.w3school.com.cn/transaction/" soap:mustUnderstand="1">234</Trans></soap:Header>SOAP Body元素负责指定要执行的方法名以及所有传递给方法的参数。在Web服务者接受、翻译并处理完了这个方法调用之后,它就会发送一个响应或错误消息。<soapenv:Body> <q0:add> <arg0>22</arg0> <arg1>111</arg1> </q0:add></soapenv>SOAP Fault:用于在SOAP消息中传输错误或状态信息。如果SOAP消息需要包含SOAP Fault元素的话,它必须作为一个Body条目出现,并且最多只能出现一次。fault元素包含如下子元素:1. faultcode,必须在SOAP Fault中出现,表示错误代码,SOAP定义了一个小的错误集合,用于定义基本的SOAP错误。2. faultstring,错误代码的描述信息3. faultlactor,用于指示错误源,属性的值是一个标识该错误源的URI4. detail,添加用户自定义的错误,包括错误消息和错误号UDDI是一种使贸易伙伴彼此发现对方和查询对方的规范。最终用户通过搜索企业列表、企业分类或者实际Web服务的可编程描述UDDI不仅是一个简易的搜索引擎,它也包含了如何通过编程来和这些Web服务进行交互。UDDI数据表UDDI的数据分为白页、黄页和绿叶:1. 白页信息:包含了基本的企业信息,例如企业名称、描述信息以及联系方式2. 黄页信息:按分类法对企业信息进行分类3. 绿叶信息:包含了如何与企业进行电子交互的信息,包含交易过程、服务描述以及解释如何调用具体Web服务的捆绑信息UDDI程序员的API规范,由两部分组成:1. Inquiry API,用于查询和浏览UDDI注册表来发现最终用户需要访问的企业和服务2. Publisher API,用于添加、更新和删除UDDI注册表中的企业和服务信息