版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
面向效劳架构第7章效劳描述—WSDLServicesDescription:WSDLWeb效劳描述语言WSDL〔WebServicesDescriptionLanguage〕是一个推荐标准。用于描述Web效劳的技术调用语法。1999年HP〔惠普〕公司是第一个引入Web效劳概念,eSpeak实现了“电子效劳〞平台。2000年6月Microsoft提出了“Web效劳〞术语,把Web效劳作为.NET方案重要组件。在Microsoft的SDL〔ServiceDescriptionLanguage和SCL〔SOAPContractLanguage〕和IBM的NASSL〔NetworkAccessibleServiceSpecificationLanguage〕这两项技术的结合,形成了WSDL的根底。SCL采用XML来描述应用程序所交换的消息,NASSL描述效劳接口和实现细节。2000年9月25日IBM、Microsoft和Ariba提出WSDL1.0。2001年3月15日,他们提交的WSDL1.1成为W3C的Note。2002年7月9日提出WSDL1.2,2003年11月10日提出WSDL2.0,WSDL2.0在2007年6月26日成为W3C正式推荐标准。开展历史WSDL描述web效劳的三个根本属性:效劳做些什么?效劳所提供的操作(方法);如何访问效劳?数据格式以及访问效劳操作的必要协议;效劳位于何处?由特定协议决定的网络地址,如URL。WebService接口消息格式约定访问地址根本属性告诉效劳的使用者如何将请求消息格式化,通过何种通信协议在何处访问webservice。WSDL的本质面向效劳视图标准描述资源与协议变换实现自动效劳部署和调用ContentJAVA2WSDLWSDL2JAVAUDDI资源效劳运行时客户端〔人〕客户端〔机器〕发布发现与定位发现与定位操作浏览器AJAX实现Web效劳体系结构的松散耦合;无论是请求者还是提供者可以各自独立地使用平台、编程语言或分布式对象模型。与IDL的不同:在描述webservice接口的同时,还要定义访问webservice的机制;需要定义webservice的有效访问位置,因为在开放的计算环境下,没有一个公共模块提供效劳的访问地址。WSDL特点协议、消息格式WSDL是XML描述的网络效劳,基于消息机制、包含面向文本或面向过程信息的操作集合操作及消息的抽象定义与它们具体的网络实现和数据格式绑定是别离的,这样就可以重用这些抽象定义WSDL文档框架OperationPortTypeMessageBindingPortServiceSupportsInput&OutputProvidesHowtoencodeFormats&ProtocolsHowtoinvokeImplementsInterfaceAccess
specificationEndpointsWSDL的组成WSDL概念模型return1return1<definitionsnamespace=“://…〞> <types>XMLschematypes</type> <message>definitionofamessage</message> <portType>asetofoperations</portType> <binding>communicationprotocols</binding> <service>alistofbindingandports</service></definitions>WSDL的结构方法名输入参数1参数2参数x输出类型类型定义类型定义消息消息操作Echo.java源代码效劳接口组成了效劳描述中的可重用局部,包括type元素、message和portType。types元素中描述消息中复杂数据类型的使用。message元素指定XML数据类型组成消息的各个局部。操作的输入或输出〔参数〕被定义为message元素。Operation元素定义了输入和输出数据流中可以出现的XML消息,作为Web效劳交互根本传输单元。portType元素中定义了Web效劳的操作,与传统中间件IDL的接口相似。效劳接口定义Seeconceptmodel效劳实现定义是一个描述给定效劳提供者如何实现特定效劳接口的WSDL文档。有binding和services。binding元素描述特定效劳接口在作为负载传输时的消息传输协议(如SOAP)、网络传输协议(如Http)、消息风格(如SOAP/RPCorSOAP/Document)和消息的编码规那么(如SOAP或literal)Port与binding一一对应,以URI的形式描述了绑定对应的端口类型的Internet访问地址。service元素。效劳元素包含一组port元素,将port逻辑分组,如同一访问地址的port可以归为一组,或一个端口类型对应的多个绑定归为一组。效劳实现定义Seeconceptmodelwsdl soap
mime soapenc soapenv xsi xsd 名称空间types元素包含了交换消息的数据类型定义。为了实现最大的互操作性〔interoperability〕和平台中立性〔neutrality〕,WSDL选用XMLSchemaDataTypes,简称XSD作为标准类型系统,并将它作为固有类型系统。<definitions....><types><xsd:schema..../>*</types></definitions>1.类型使用元素〔element〕形式,而不使用属性(attribute)形式;不包括仅在特殊的协议和数据格式中使用的元素或者属性;数组类型使用Soap:Array类型,并使用ArrayOfXXX作为数组类型的名;使用XSD编码表示xsd:anyType。类型—XSD编码抽象数据类型建议<types><schema……>
<elementname="PO"type="tns:POType"/>
<complexTypename="POType">
<elementname="id"type="string"/>
<elementname="name"type="string"/>
<elementname="items">
<complexType>
<elementname="item"type="tns:Item"minOccurs="0"maxOccurs="unbounded"/>
</complexType>
</element>
</complexType>
<complexTypename="Item">
<elementname="quantity"type="int"/>
<elementname="product"type="string"/>
</complexType>
<elementname="Customer"type="tns:CustomerType"/>
<complexTypename="CustomerType">
<elementname="name"type="string"/>
</complexType>
</schema></types>消息由假设干个逻辑部件〔part〕构成。每个部件使用一个消息类型属性与某个类型系统的类型相关联。消息定义语法如下:<definitions....><messagename="nmtoken">*<partname="nmtoken"element="qname"?type="qname"?/>*</message></definitions>消息(message)name属性指定了消息的名称。如果消息具有多个逻辑单位,那么需要使用多个part元素。2.消息<messagename="PO"><partname="po"element="tns:PO"/><partname="customer"element="tns:Customer"/></message><messagename="P1"><partname=“address"type=“XSD:string"/></message><messagename="P2"><partname="composite"type="tns:Composite"/></message>可以用XMLSchema定义的元素来描述part消息例如端口类型是一个由抽象操作和抽象消息构成的有名称的集合。<wsdl:definitions....><wsdl:portTypename="nmtoken">*<wsdl:operationname="nmtoken"><wsdl:inputname="nmtoken"?message="qname"/><wsdl:outputname="nmtoken"?message="qname"/><wsdl:faultname="nmtoken"message="qname"/>*</wsdl:operation></wsdl:portType></wsdl:definitions>表示端口类型名称表示操作名称操作中引用到的消息通过message属性指定3.端口类型定义(portType)消息操作echo.wsdl为一个端口类型定义了四方面的内容:消息传输协议网络传输协议消息风格RPC风格操作的输入输出消息包含的是对远程过程调用的输入和输出参数,而文档风格的输入和输出消息包含的是交互双方事先约定的任意XML文档。编码规那么定义把消息的各个局部序列化为XML文档流是所采用的编码规那么。通常有两种:字面(literal)和SOAP。字面编码规那么直接使用types元素或XMLSchema定义的类型来表示消息内容;而SOAP编码规那么需要把用XMLSchema定义的类型根据SOAP标准定义的编码规那么转换后填充为消息内容。4.binding元素<bindingname="TimeServiceSoap"type="s0:TimeServiceSoap"> <soap:bindingstyle="document"transport=":///soap/"/> <operationname="getUTCTime"> <soap:operationsoapAction="://"style="document"/> <input> <soap:bodyuse="literal"/></input> <output><soap:bodyuse="literal"/></output> </operation> <operationname="getOffesetUTCTime"> <soap:operationsoapAction="://"style="document"/> <input> <soap:bodyuse="literal"/> </input> <output> <soap:bodyuse="literal"/> </output> </operation></binding>binding例子关联的端口类型消息协议消息风格传输协议Http包头的属性消息内容在SOAP消息体中的表现形式literal/encoded<wsdl:bindingname="nmtoken"type="qname">*<wsdl:documentation..../>?<--extensibilityelement-->*<wsdl:operationname="nmtoken">*<wsdl:documentation..../>?<--extensibilityelement-->*<wsdl:input>?<wsdl:documentation..../>?<--extensibilityelement--></wsdl:input><wsdl:output>?<wsdl:documentation..../>?<--extensibilityelement-->*</wsdl:output><wsdl:faultname="nmtoken">*<wsdl:documentation..../>?<--extensibilityelement-->*</wsdl:fault></wsdl:operation></wsdl:binding>binding元素结构<servicename="TimeService"> <documentation>AsampleTimeservice</documentation> <portname="TimeServiceSoap"binding="s0:TimeServiceSoap"> <soap:addresslocation="://"/> </port> <portname="TimeServiceHttpGet"binding="s0:TimeServiceHttpGet"> <:addresslocation="://"/> </port> <portname="TimeServiceHttpPost"binding="s0:TimeServiceHttpPost"> <:addresslocation="://"/> </port></service>为绑定指定唯一地址来定义一个访问端口。5.service元素<wsdl:servicename="nmtoken">*<wsdl:documentation..../>?<wsdl:portname="nmtoken"binding="qname">*<wsdl:documentation..../>?<--extensibilityelement--></wsdl:port><--extensibilityelement--></wsdl:service>service元素结构绑定效劳端口“echo.wsdl〞文件Service中的port具有如下的关系:如果一个效劳中有多个访问端口属于同一端口类型,但是对应不同的绑定或者地址,那么这些访问端口可以相互替换。这使得WSDL文档使用者根据需要选择访问端口。通过检查访问端口可以确定效劳的端口类型。这使得WSDL文档的使用者能够根据它支持的端口类型决定是否与一个特定的效劳通讯。所有访问端口都不相互通信,即一个效劳的访问端口的输出不会是另一个访问端口的输入。实例WSDL1.1支持4种消息交换方式,来访问效劳端口。单向〔One-way〕:效劳访问端口接收消息;请求响应〔Request-response〕:效劳访问端口接收请求消息,然后发送响应消息;要求应答〔Solicit-response〕:效劳访问端口发送要求消息,然后接收应答消息;通知〔Notification〕:效劳访问端口发送通知消息。消息交换方式单向操作语法:<wsdl:definitions....><wsdl:portType....>*<wsdl:operationname="nmtoken"><wsdl:inputname="nmtoken"?message="qname"/></wsdl:operation></wsdl:portType></wsdl:definitions>input元素指定用于单向操作的抽象消息格式。单向操作请求响应操作语法<wsdl:definitions....><wsdl:portType....>*<wsdl:operationname="nmtoken"parameterOrder="nmtokens"><wsdl:inputname="nmtoken"?message="qname"/><wsdl:outputname="nmtoken"?message="qname"/><wsdl:faultname="nmtoken"message="qname"/>*</wsdl:operation></wsdl:portType></wsdl:definitions>请求响应操作要求应答操作语法<wsdl:definitions....><wsdl:portType....>*<wsdl:operationname="nmtoken"parameterOrder="nmtokens"><wsdl:outputname="nmtoken"?message="qname"/><wsdl:inputname="nmtoken"?message="qname"/><wsdl:faultname="nmtoken"message="qname"/>*</wsdl:operation></wsdl:portType></wsdl:definitions>要求应答操作通知操作语法<wsdl:definitions....><wsdl:portType....>*<wsdl:operationname="nmtoken"><wsdl:outputname="nmtoken"?message="qname"/></wsdl:operation></wsdl:portType></wsdl:definitions>通知操作如果单向操作和通知操作未指定name属性,那么该属性名默认为是操作名。如果请求响应或要求应答操作中未指定name属性,那么该属性名默认为是操作名+“Request〞/“Responese〞/“Solicit〞。针对于请求应答和要求应答操作可以通过parameterOrder指定一个参数名列表。该属性的值是一个用空格分开的消息构件名序列。操作中的元素名称SOAP:binding元素说明WSDL文档绑定到SOAP协议格式,该元素在使用SOAP绑定时是必需的。<definitions....><binding....><soap:bindingtransport="uri"?style="rpc|document"?></binding></definitions>style属性值是它所包含的操作子元素的style属性的默认值。transport属性是必需的,它的值表示绑定的传输方式与SOAP的何种传输方式一致。URI值:///soap/表示传输方式和SOAP标准的HTTP绑定相一致。soap:binding元素
<definitions....><binding....><operation....><soap:operationsoapAction="uri"?style="rpc|document"?>?</operation></binding></definitions>soap:operation<definitions....><binding....><operation....><input><soap:bodyparts="nmtokens"?use="literal|encoded"?encodingStyle="uri-list"?namespace="uri"?></input><output><soap:bodyparts="nmtokens"?use="literal|encoded"?encodingStyle="uri-list"?namespace="uri"?></output></operation></binding></definitions>soap:body<definitions....><binding....><operation....><fault>*<soap:faultname="nmtoken"use="literal|encoded"encodingStyle="uri-list"?namespace="uri"?></fault></operation></binding></definitions>soap:fault<definitions....><binding....><operation....><input><soap:headermessage="qname"part="nmtoken"use="literal|encoded"encodingStyle="uri-list"?namespace="uri"?>*<soap:headerfaultmessage="qname"part="nmtoken"use="literal|encoded"encodingStyle="uri-list"?namespace="uri"?/>*<soap:header></input><output><soap:headermessage="qname"part="nmtoken"use="literal|encoded"encodingStyle="uri-list"?namespace="uri"?>*<soap:headerfaultmessage="qname"part="nmtoken"use="literal|encoded"encodingStyle="uri-list"?namespace="uri"?/>*<soap:header></output></operation></binding></definitions>soap:header和soap:headerfault<definitions....><port....><soap:addresslocation="uri"/></port></definitions>soap:address1.rpc/encoded2.rpc/literal3.document/encoded4.document/literal消息传递模式publicclassmyServices{publicvoidmyMethod(intx){return}}效劳WSDL文档内容<messagename="myMethodRequest"><partname="x"type="xsd:int"/></message><messagename="empty"/><portTypename="PT"><operationname="myMethod"><inputmessage="myMethodRequest"/><outputmessage="empty"/></operation></portType>1.rpc/encoded样式SOAP文档内容<soap:envelope><soap:body><myMethod><xxsi:type="xsd:int">5</x></myMethod></soap:body></soap:envelope>1.rpc/encoded样式WSDL文档内容<messagename="myMethodRequest"><partname="x"type="xsd:int"/></message><messagename="empty"/><portTypename="PT"><operationname="myMethod"><inputmessage="myMethodRequest"/><outputmessage="empty"/></operation></portType>2.rpc/literal样式SOAP文档内容<soap:envelope><soap:body><myMethod><x>5</x></myMethod></soap:body></soap:envelope>2.rpc/literal样式WSDL文档内容<types><schema><elementname="xElement"type="xsd:int"/></schema></types><messagename="myMethodRequest"><partname="x"element="xElement"/></message><messagename="empty"/><portTypename="PT"><operationname="myMethod"><inputmessage="myMethodRequest"/><outputmessage="empty"/></operation></portType>3.document/encodedSOAP文档内
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二四年度游戏开发与运营许可合同2篇
- 防水工程维护及保修合同(2024年度)3篇
- 二零二四年度语音识别技术研发合同2篇
- 全新可再生能源发电项目投资合同(2024版)2篇
- 二零二四年度星级酒店内部装饰设计与施工合同2篇
- 2024年度互联网金融借贷合同(含利率和还款)
- 跨境经销代理合同模板
- 工程中中标合同范例
- 超市活动租赁合同范例
- 聘用灵活就业人员合同模板
- 西安美食小吃
- 婴幼儿生活照护(中职)PPT完整全套教学课件
- 外请专家会诊与手术管理制度
- GB/T 42755-2023人工智能面向机器学习的数据标注规程
- 福特蒙迪欧说明书
- 电气设备点检课件
- 道路运输企业安全风险辨识风险分级管控清单模版
- 2019-2020全国青少年度校园足球联赛
- 2022年河南周口市眼科医院招聘35人笔试备考题库及答案解析
- 抗菌药物使用调查分析(5篇)
- 华为鸿蒙深度研究
评论
0/150
提交评论