Presentation is loading. Please wait.

Presentation is loading. Please wait.

Web服务.

Similar presentations


Presentation on theme: "Web服务."— Presentation transcript:

1 Web服务

2 13内容介绍 概念介绍:webservice/soap/wsdl/xml Apache AXIS:实现SOAP的web服务框架
利用axis创建SOAP服务和SOAP客户的方法 SOA

3 WEB服务 A Service is a piece of software that is not tightly coupled with client applications. Services are dynamically discoverable and composable entities. WEB服务是一种基于XML、SOAP、HTTP、UDDI(Universal Description Discovery and Integration )、WSDL(Web Service Description Language )等一系列标准实现的分布式计算技术。 WEB服务提供了一个松耦合和跨平台的分布式计算环境,它是一个与操作系统无关、程序设计语言无关、机器类型无关、运行环境无关的平台,实现网络上应用的共享,并可用于复杂的系统集成。

4 WEB服务产生背景(Cont.) 信息化应用需求 跨互联网 松散耦合 协同工作 资源共享 互连 互通 互操作 HTML Any time
Any where Any device SOAP/WSDL/UDDI 跨互联网 松散耦合 协同工作 资源共享 Internet

5 WEB服务的目标 为了让地理上分布在不同区域的计算机和设备一起工作,为用户提供各种各样的服务。
用户可控制要获取信息的内容、时间、方式,不必像目前这样,在无数个信息孤岛中浏览,寻找自己需要的信息。

6 WEB服务架构 SOA(Service Oriented Architecture)架构 三个参与者:服务提供者、服务请求者、服务中介者
三个基本操作:发布、发现、绑定

7 XML – 可扩展标记语言 XML:标记内容。标准、通用、可扩展、内容和应用分离、自解释。 XSL:描述XML文档显示格式的语言。
Schema:定义XML文档的结构、内容和语义。 XML技术是最近几年IT产业中最具有变革和创新意义的技术,它使信息第一次有了统一的表达和应用方式。 从技术角度,XML语言只是一种简单的信息描述语言。 从应用角度,XML的价值远不止于此,借助它可准确表示各种类型的数字化信息,阐释信息的内涵和信息之间的关联,从而更好的进行信息共享、定位和查找。

8 SOAP – 简单对象访问协议 soap以xml形式提供一个简单、轻量的用于在分散或分布环境中交换结构化和类型信息的机制。soap本身并没有定义任何应用程序语义,如编程模型和特定语义的实现。它提供了一个有标准组件的打包模型在模块中编码的机制。 soap消息包括一个必有的soap信封、一个可选的soap头和一个必有的soap体,信封是文档的顶层元素。 SOAP可简单理解为HTTP + XML + RPC:HTTP作为底层通信协议,RPC作为一致性的调用途径、XML作为数据传输的格式。

9 WSDL – web服务描述语言 将Web服务描述为一组服务访问点,客户端可以通过这些服务访问点对包含面向文档信息或面向过程调用的服务进行访问。 抽象描述访问的操作和访问时使用的请求/响应消息,将其绑定到具体的传输协议和消息格式。 相关的具体部署的服务访问点通过组合就成为抽象的Web服务。 描述服务的主要元素:Types、Message、Operation、Port Type、Binding、Port、Service

10 UDDI – 统一描述、发现和集成 UDDI 计划最初是由总部在美国加利福尼亚的Ariba 发起的,并在 IBM 和微软公司积极参与下开发的。尝试解决电子商务交易的集成和自动化问题。 UDDI在两个方面提供了其解决方案: 1.它定义了一系列技术规范,使商家可以用来描述自身、他们的产品和服务,以及他们在Web的商业过程。 2.有一个全球企业注册表,能使跨越多个平台上的企业方便地搜索和发现对方。 服务开发者 服务请求者 发现 API WSDL 描述 服务部署 服务提供者 绑定 删除 UDDI 中心 发布API

11 WEB服务流程图 1. 实现并部署:程序设计语言 服务 服务提供者 2. 服务发布: WSDL+UDDI API 绑 定 服务中介者
注册中心 服务请求者 3. 服务发现: UDDI API+ 参数 4. 请求返回: WSDL

12 存在的问题 XML:基本文本格式的消息协议,冗长,效率低。 QoS:广域网情况复杂-带宽,可靠性、延迟。
标准:Web服务最底层的UDDI,WSDL,SOAP三大核心标准逐渐成熟,但web服务本身是应用层技术,应用层复杂性是制定标准面临的难题。 安全:消息的机密性和完整性,传输层加密通信、用户认证?需要在方法级别上提供安全性的能力吗? 管理:如何管理高度分布式的系统?集中式还是“外包”?

13 IT Architecture Overview
Portal Service Collaboration Tools B2B Interactions Process Orchestration Business Intelligence Services Applications & Data Service Registry Application functions are built as components (or "services") that are loosely-coupled and well-defined to support interoperability, and to improve flexibility and re-use IBM’s ESB Graphic

14 SOA 面向服务的软件体系结构的实现 监控 开发 发现 绑定 监控 发现 绑定 发布 发现 开发 绑定 流程开发人员 WSWD 系统管理人员
WSMT 门户 WS Portal 发现 绑定 工作流建模工具 监控 开发 监控 监控管理工具 工作流引擎 WSWF 绑定 发现 服务注册中心 UDDI 发现 发布 Transa ,WSRF Rliable HTTP 1.1 XService XLinker WS 服务提供者 WS XLinker 服务开发者 WSDesigner 服务请求者 WSClient 服务提供者 WS XService 开发 绑定 客户端开发工具 服务开发工具

15 Web服务协议栈 Transports HTTP, FTP, SMTP,POP3 …

16 WEB服务架构 SOA(Service Oriented Architecture)架构 三个参与者:服务提供者、服务请求者、服务中介者
三个基本操作:发布、发现、绑定

17 AXIS平台 AXIS是由Apache实现的一套SOAP服务器,为Web服务应用程序的创建和发布提供了平台。

18 具体开发流程 创建apache Axis环境,包括下载其web应用 在Tomcat上发布axis的web应用 创建SOAP服务
创建提供SOAP服务的java类 创建SOAP服务的发布描述符文件 管理SOAP服务 发布SOAP服务 删除SOAP服务 创建和运行SOAP客户程序 MVC架构 RMI远程调用(回调)

19 apache Axis环境 axis-1_2/lib/axis.jar axis-1_2/lib/jaxrpc.jar
axis-1_2/lib/saaj.jar axis-1_2/lib/commons-logging.jar axis-1_2/lib/commons-discovery.jar axis-1_2/lib/wsdl4j.jar axis-1_2/ (for the sample code) A JAXP-1.1 compliant XML parser such as Xerces or Crimson. We recommend Xerces, 源代码中有

20 具体开发流程 创建SOAP服务 创建提供SOAP服务的java类 package mypack;
public class HelloService { public String sayHello(String username) { return "Hello:"+username; }

21 具体开发流程 创建SOAP服务 创建提供SOAP服务的java类 创建SOAP服务的发布描述符文件 Wsdd文件来发布soap服务
<deployment> <service> <parameter name=“” value=“” />

22 WSDD <deployment xmlns=" xmlns:java=" <service name="MyService" provider="java:RPC"> <parameter name="className" value="samples.example3.MyService"/> <parameter name="allowedMethods" value="*"/> </service> </deployment> 非常简单,最外层元素告诉引擎这是一个WSDD部署文件,并且定义了java的名字空间,接下来的service元素定义了我们的服务。一个服务就是一个targeted chain,意味着它将有下面的一个或多个:一个请求流,一个Handler,一个响应流。这里我们的provider是Axis内置的java:RPC ,这说明这是一个Java RPC服务。为了让RPCProvider能够调用正确的方法,我们使用<parameter>标签,一个参数定义服务的类名,另一个参数告诉引擎这个类的任何public方法都可以通过SOAP调用。

23 更多的部署 现在让我们来了解Axis引擎更强大的特性,假设你想知道你的服务被调用了多少次,我们在sample/log下有一个简单的handler来实现这一点。要使用这个handler类,你需要首先部署它,然后你使用你给他指定的名字来部署服务,下面是一个简单的部署文件:

24 更多的部署 <deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java=" <!-- define the logging handler configuration --> <handler name="track" type="java:samples.example4.LogHandler"> <parameter name="filename" value="MyService.log"/> </handler> <!-- define the service, using the log handler we just defined --> <service name="LogTestService" provider="java:RPC"> <requestFlow> <handler type="track"/> </requestFlow> <parameter name="className" value="samples.example4.Service"/> <parameter name="allowedMethods" value="*"/> </service> </deployment>

25 更多的部署 第一部分定义了一个称作track的Handler,它是由LogHandler类实现的,我们同时使用了参数指定了写入log的文件。
这样我们就定义了一个web服务,LogTestService,它和我们看到的RPC服务是一样的。不同的地方是在<service>元素内我们包含了<requestFlow>元素——这意味着当你调用这个服务时需要执行一些Handlers。通过引入一个track,我们保证了每次调用服务都会写如日志。

26 具体开发流程 管理SOAP服务 发布SOAP服务 删除SOAP服务 两种管理工具:1、 基于web的 2、基于命令行的

27 具体开发流程 创建和运行SOAP客户程序 import org.apache.axis.client.Call;
import org.apache.axis.client.Service; import javax.xml.namespace.QName; public class HelloClient { public static void main(String [] args) { try { String username="Guest"; if(args.length!=0) username=args[0]; String endpoint = " Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress( new java.net.URL(endpoint) ); call.setOperationName(new QName("urn:helloservice", "sayHello") ); String ret = (String) call.invoke( new Object[] { username} ); System.out.println(ret); } catch (Exception e) { e.printStackTrace(); } }}

28 具体开发流程 创建和运行SOAP客户程序 import org.apache.axis.client.Call;
import org.apache.axis.client.Service; import javax.xml.namespace.QName; public class HelloClient { public static void main(String [] args) { try { String username="Guest"; if(args.length!=0) username=args[0]; String endpoint = " Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress( new java.net.URL(endpoint) ); call.setOperationName(new QName("urn:helloservice", "sayHello") ); String ret = (String) call.invoke( new Object[] { username} ); System.out.println(ret); } catch (Exception e) { e.printStackTrace(); } }}

29 请求格式 <?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:xsd= xmlns:SOAP-ENV=" xmlns:xsi=" <SOAP-ENV:Body> <ns1:echoString xmlns:ns1=" <arg0 xsi:type="xsd:string">Guest</arg0> </ns1:echoString> </SOAP-ENV:Body> </SOAP-ENV:Envelope>

30 响应格式 <?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:xsd=" xmlns:SOAP-ENV=" xmlns:xsi=" <SOAP-ENV:Body> <ns1:echoStringResponse xmlns:ns1=" <result xsi:type="xsd:string">Hello!Guest</result> </ns1:echoStringResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope>

31 wsdl主要内容 WSDL发展历史 WSDL的基本属性 WSDL的定义 WSDL的文档框架 --类型 消息 端口类型 绑定 服务

32 WSDL发展历史 Web服务描述语言WSDL(Web Services Description Language)是一个建议性标准。用于描述Webb服务的技术调用语法。 1999年HP(惠普)公司是第一个引入Web服务概念,eSpeak实现了“电子服务”平台。 2000年6月Microsoft提出了“Web服务”术语,把Web服务作为.NET计划重要组件。 在Microsoft的SDL(Service Description Language和SCL(SOAP Contract Language)和IBM的NASSL(Network Accessible Service Specification Language)这两项技术的结合,形成了WSDL的基础。SCL采用XML来描述应用程序所交换的消息,NASSL描述服务接口和实现细节。 2000年9月25日IBM、Microsoft和Ariba提出WSDL1.0。2001年3月15日,他们提交的WSDL1.1成为W3C的Note。WSDL1.1规范网址是

33 WSDL描述web服务的三个基本属性: 服务做些什么? 如何访问服务? 服务位于何处? 服务所提供的操作(方法);
数据格式以及访问服务操作的必要协议; 服务位于何处? 由特定协议决定的网络地址,如URL。

34 Web服务描述语言(Web Services Description Language WSDL)是Web Services技术重要组成部分。
WSDL描述了分布在Internet环境中服务操作的抽象定义接口和服务的具体实现端口,实现远程计算资源共享。 WSDL通常是协议定义的,协议描述缺乏准确性和严格性,需要一种形式化的表示和描述方法。

35 面向服务视图 规范描述资源与协议变换 实现自动服务部署和调用 客户端(人) 运行时 操作 客户端(机器) 服务 资源 WSDL2JAVA
JAVA2WSDL UDDI 客户端(人) 发现与定位 发布 Content 发现与定位 浏览器AJAX 运行时 操作 客户端(机器) 服务 规范描述资源与协议变换 实现自动服务部署和调用 资源

36 SOAP RPC SOAP文档内容 <soap:envelope> <soap:body>
<myMethod> <x>5</x> </myMethod> </soap:body> </soap:envelope>

37 服务调用 SOAP消息 SOAP消息 HTTP HTTP WSDL2JAVA XML2JAVA 服务描述CONTEXT
Class Operation XML Message XML Message SOAP消息 SOAP消息 前置机 HTTP HTTP

38 WSDL定义 WSDL是XML描述的网络服务,基于消息机制、包含面向文本或面向过程信息的操作集合。
操作及消息的抽象定义与它们具体的网络实现和数据格式绑定是分离的,这样就可以重用这些抽象定义。 消息是需要交换数据的抽象描述; 端点类型是操作的抽象集合。 针对一个特定端点类型的具体协议和数据格式规范构成一个可重用的绑定。 一个端点定义成网络地址和可重用的绑定的联接,端点的集合定义为服务。

39 服务接口定义和服务实现定义 服务接口组成了服务描述中的可重用部分, type元素、message和portType。
types元素中描述消息中复杂数据类型的使用。 message元素指定XML 数据类型组成消息的各个部分。message 元素用于定义操作的输入和输出参数。 portType元素中定义了Web服务的操作。操作定义了输入和输出数据流中可以出现的XML消息。

40 服务实现定义是一个描述给定服务提供者如何实现特定服务接口的WSDL文档。 有binding和services。
服务接口定义和服务实现定义 服务实现定义是一个描述给定服务提供者如何实现特定服务接口的WSDL文档。 有binding和services。 binding 元素描述特定服务接口的协议、数据格式、安全性和其它属性。 service元素。服务元素包含一组port元素。端口将端点与来自服务接口定义的binding 元素关联起来。

41 WSDL是一种XML应用,它将Web Services描述定义为一组服务访问端点,客户端可以通过这些服务访问端点对包含面向文档信息或面向过程调用的服务进行访问。
在具体使用中,可以使用任意的消息格式和网络协议。 在WSDL规范中,定义了如何使用SOAP消息格式、HTTP GET/POST消息格式以及MIME格式来完成Web Services交互的规范。

42 WSDL特点 实现 Web 服务体系结构的松散耦合; 无论是请求者还是提供者可以各自独立地使用平台、编程语言或分布式对象模型。

43 命名空间 wsdl http://schemas.xmlsoap.org/wsdl/
soap http mime soapenc soapenv xsi xsd

44 WSDL文档框架 <wsdl:definitions name="nmtoken"? targetNamespace="uri"?> <import namespace="uri" location="uri"/>* <wsdl:types> ? ……</wsdl:types> <wsdl:message name=“nmtoken”>* ……</wsdl:message> <wsdl:portType name="nmtoken">* ……</wsdl:portType> <wsdl:binding name="nmtoken" type="qname">* ……</wsdl:binding> <wsdl:service name="nmtoken">*……</wsdl:service> </wsdl:definitions>

45 types元素 <wsdl:types> ? <wsdl:documentation .... />?
<xsd:schema .... />* <-- extensibility element --> * </wsdl:types>

46 message元素 <wsdl:message name="nmtoken"> *
<wsdl:documentation .... />? <part name="nmtoken" element="qname"? type="qname"?/> * </wsdl:message>

47 portType元素 <wsdl:portType name="nmtoken">*
<wsdl:documentation .... />? <wsdl:operation name="nmtoken">* <wsdl:documentation .... /> ? <wsdl:input name="nmtoken"? message="qname">? </wsdl:input> <wsdl:output name="nmtoken"? message="qname">? </wsdl:output> <wsdl:fault name="nmtoken" message="qname"> * </wsdl:fault> </wsdl:operation> </wsdl:portType>

48 binding元素 <wsdl:binding name="nmtoken" type="qname">*
<wsdl:documentation .... />? <-- extensibility element --> * <wsdl:operation name="nmtoken">* <wsdl:documentation .... /> ? <wsdl:input> ? <-- extensibility element --> </wsdl:input> <wsdl:output> ? </wsdl:output> <wsdl:fault name="nmtoken"> * </wsdl:fault> </wsdl:operation> </wsdl:binding>

49 service元素 <wsdl:service name="nmtoken"> *
<wsdl:documentation .... />? <wsdl:port name="nmtoken" binding="qname">* <wsdl:documentation .... /> ? <-- extensibility element --> </wsdl:port> </wsdl:service>

50 类型 types元素包含了交换消息的数据类型定义。为了实现最大的互操作性(interoperability)和平台中立性(neutrality),WSDL选用XML Schema DataTypes,简称XSD作为标准类型系统,并将它作为固有类型系统。 <definitions .... > <types> <xsd:schema .... />* </types> </definitions>

51 类型—XSD编码抽象数据类型建议 使用元素(element)形式,而不使用属性(attribute)形式;
不包括仅在特殊的协议和数据格式中使用的元素或者属性; 数组类型使用Soap:Array 类型,并使用ArrayOfXXX作为数组类型的名; 使用XSD编码表示xsd:anyType。

52 <types> <schema…> <element name="PO" type="tns:POType"/> <complexType name="POType"> <element name="id" type="string/> <element name="name" type="string"/> <element name="items"> <complexType> <element name="item" type="tns:Item" minOccurs="0“ maxOccurs="unbounded"/> </complexType> </element> <complexType name="Item"> <element name="quantity" type="int"/> <element name="product" type="string"/> <element name="Customer" type="tns:CustomerType"/> <complexType name="CustomerType"> </schema> </types>

53 消息 消息由若干个逻辑部件(part)构成。每个部件使用一个消息类型属性与某个类型系统的类型相关联。 消息定义与法如下:
<definitions .... > <message name="nmtoken"> * <part name="nmtoken" element="qname"? type="qname"?/> * </message> </definitions> 消息(message)name属性指定了消息的名称。 如果消息具有多个逻辑单位,则需要使用多个part元素。

54 消息示例 <message name="PO">
<part name="po" element="tns:PO"/> <part name="customer" element="tns:Customer"/> </message> <message name="P1"> <part name=“address" type=“XSD:string"/> <message name="P2"> <part name="composite" type="tns:Composite"/>

55 在WSDL文档中,消息名称定义具有唯一性,即
s=λ(&s,"definition\*") 在WSDL文档中,消息名称定义具有唯一性,即 xλ(&s,"message") (yλ(&s,"message","name",σ(&x,"name"))x=y) 在消息定义中,部件名称定义具有唯一性,即 yλ(&x,"message\part") (zλ(&x,"message\part","name",σ(&y,"name")) y=z)

56 消息类型属性集合是可扩展的。WSDL定义如下消息类型属性
element:使用QName引用一个XSD元素,即 xλ(&s, "message\part") (σ(&x,"element") !yλ(&s,"types\schema\element") σ(&x,"element")=σ(&y,"name"))) type:使用QName引用个XSD simpleType(简单类型)或XSD complexType (复含类型),即 xλ(&s,"message\part") (σ(&x,"type") σ(&x,"type")XSDtypes) yλ(&s,"types\schema\complexType") (σ(&x,"type")=σ(&y,"name")) yλ(&s,"types\schema\simpleType") (σ(&x,"type")=σ(&y,"name")))

57 端口类型定义 端口类型是一个由抽象操作和抽象消息构成的有名称的集合。 <wsdl:definitions .... >
<wsdl:portType name="nmtoken"> * <wsdl:operation name="nmtoken"> <wsdl:input name="nmtoken"? message="qname"/> <wsdl:output name="nmtoken"? message="qname"/> <wsdl:fault name="nmtoken" message="qname"/>* </wsdl:operation> </wsdl:portType > </wsdl:definitions> 端口类型定义的name属性表示端口类型名称,操作定义的name属性表示操作名称。

58 s=λ(&s,"definition\*") 端口类型名称具有唯一性,即 xλ(&s,"portType") (yλ(&s,"portType","name",σ(&x,"name")) x=y) 在相同端口类型中,操作名称具有唯一性,即 yλ(&x,"portType\operation") (zλ(&x,"portType\operation","name",σ(&y,"name")) y=z)

59 在不同的端口类型中,如果操作名称相同,则操作定义相同。
xλ(&s,"portType\operation") (yλ(&s,"portType\operation","name",σ(&x,"name")) x=y) 操作的input、output和fault元素的message属性所指定的消息,在WSDL的message中已定义,即 xλ(&s,"portType\operation\input") yλ(&s,"message")(σ(&x,"message")=σ(&y,"name")) xλ(&s,"portType\ operation\output")  yλ(&s,"message")(σ(&x,"message")=σ(&y,"name")) xλ(&s,"portType\ operation\fault")  yλ(&s,"message")(σ(&x,"message")=σ(&y, "name"))

60 操作 WSDL支持4种消息交换方式,来访问服务端点。 操作中引用到的消息通过message属性指定。
单向(One-way):服务访问端点接收消息; 请求响应(Request-response):服务访问端点接收请求消息,然后发送响应消息; 要求应答(Solicit-response):服务访问端点发送要求消息,然后接收应答消息; 通知(Notification):服务访问端点发送通知消息。 操作中引用到的消息通过message属性指定。

61 单向操作 单向操作语法: <wsdl:definitions .... >
<wsdl:portType .... > * <wsdl:operation name="nmtoken"> <wsdl:input name="nmtoken"? message="qname"/> </wsdl:operation> </wsdl:portType > </wsdl:definitions> input元素指定用于单向操作的抽象消息格式。

62 请求响应操作 请求响应操作语法 <wsdl:definitions .... >
<wsdl:portType .... > * <wsdl:operation name="nmtoken" parameterOrder="nmtokens"> <wsdl:input name="nmtoken"? message="qname"/> <wsdl:output name="nmtoken"? message="qname"/> <wsdl:fault name="nmtoken" message="qname"/>* </wsdl:operation> </wsdl:portType > </wsdl:definitions>

63 要求应答操作 要求应答操作语法 <wsdl:definitions .... >
<wsdl:portType .... > * <wsdl:operation name="nmtoken" parameterOrder="nmtokens"> <wsdl:output name="nmtoken"? message="qname"/> <wsdl:input name="nmtoken"? message="qname"/> <wsdl:fault name="nmtoken" message="qname"/>* </wsdl:operation> </wsdl:portType > </wsdl:definitions>

64 通知操作 通知操作语法 <wsdl:definitions .... >
<wsdl:portType .... > * <wsdl:operation name="nmtoken"> <wsdl:output name="nmtoken"? message="qname"/> </wsdl:operation> </wsdl:portType > </wsdl:definitions>

65 操作中的元素名称 如果单向操作和通知操作未指定name属性,则该属性名默认为是操作名。
操作名+“Request”/“Responese”/“Solicit”。 针对于请求应答和要求应答操作可以通过parameterOrder指定一个参数名列表。该属性的值是一个用空格分开的消息构件名序列 。

66 绑定 绑定语法如下: <wsdl:definitions .... >
<wsdl:binding name="nmtoken" type="qname"> * <-- extensibility element (1) --> * <wsdl:operation name="nmtoken"> * <-- extensibility element (2) --> * <wsdl:input name="nmtoken"? > ? <-- extensibility element (3) --> </wsdl:input> <wsdl:output name="nmtoken"? > ? <-- extensibility element (4) --> * </wsdl:output> <wsdl:fault name="nmtoken"> * <-- extensibility element (5) --> * </wsdl:fault> </wsdl:operation> </wsdl:binding> </wsdl:definitions>

67 服务与访问端点 访问端点(port)通过为绑定指定唯一地址来定义一个访问端点。访问端点语法如下:
<wsdl:definitions .... > <wsdl:service .... > * <wsdl:port name="nmtoken" binding="qname">* <-- extensibility element (1) --> </wsdl:port> </wsdl:service> </wsdl:definitions> 在WSDL文档范围内,访问端点的name属性具有唯一性。

68 服务 服务是访问端点集合,服务语法如下: <wsdl:definitions .... >
<wsdl:service name="nmtoken">* <wsdl:port ..../>* </wsdl:service> </wsdl:definitions> 在WSDL文档中,服务的name属性具有唯一性。

69 服务中的访问端点具有如下的关系: 所有访问端点都不相互通信,即一个服务的访问端点的输出不会是另一个访问端点的输入。
如果一个服务中有多个访问端点属于同一端口类型,但是对应不同的绑定或者地址,则这些访问端点可以相互替换。这使得WSDL文档使用者根据需要选择访问端点。 通过检查访问端点可以确定服务的端口类型。这使得WSDL文档的使用者能够根据它支持的端口类型决定是否与一个特定的服务通讯。

70 SOAP绑定 <binding…>
<soap:binding style="rpc|document" transport="uri"> <operation…> <soap:operation soapAction="uri"? style="rpc|document"?>? <input> <soap:body parts="nmtokens"? use="literal|encoded" encodingStyle="uri-list"? namespace="uri"?> <soap:header element="qname" fault="qname"?>* </input> <output> </output> <fault>* <soap:fault name="nmtoken" use="literal|encoded" </fault> </operation> </binding>

71 soap:binding元素 SOAP:binding元素表明WSDL文档绑定到SOAP协议格式,该元素在使用SOAP绑定时是必需的。
<definitions .... > <binding .... > <soap:binding transport="uri"? style="rpc|document"?> </binding> </definitions> style属性值是它所包含的操作子元素的style属性的默认值。 transport属性是必需的,它的值表示绑定的传输方式与SOAP的何种传输方式一致。URI值 表示传输方式和SOAP规范的HTTP绑定相一致。

72 soap:operation <definitions .... > <binding .... >
<soap:operation soapAction="uri"? style="rpc|document"?>? </operation> </binding> </definitions>

73 soap:body <definitions .... > <binding .... >
<operation .... > <input> <soap:body parts="nmtokens"? use="literal|encoded"? encodingStyle="uri-list"? namespace="uri"?> </input> <output> encodingStyle="uri-list"? namespace="uri"?> </output> </operation> </binding> </definitions>

74 soap:fault <definitions .... > <binding .... >
<operation .... > <fault>* <soap:fault name="nmtoken" use="literal|encoded" encodingStyle="uri-list"? namespace="uri"?> </fault> </operation> </binding> </definitions>

75 soap:header和soap:headerfault
<definitions .... > <binding .... > <operation .... > <input> <soap:header message="qname" part="nmtoken" use="literal|encoded" encodingStyle="uri-list"? namespace="uri"?>* <soap:headerfault message="qname" part="nmtoken" use="literal|encoded" encodingStyle="uri-list"? namespace="uri"?/>* <soap:header> </input> <output> </output> </operation> </binding> </definitions>

76 soap:address <definitions .... > <port .... >
<soap:address location="uri"/> </port> </definitions>

77 portType、binding与port
一个portType可以对应多个bindng 一个binding可以对应多个port portType binding binding binding port port port port

78 消息传递模式 1.rpc/encoded 2.rpc/literal 3.document/encoded
4.document/literal

79 服务 public class myServices { public void myMethod (int x){ return }

80 rpc/encoded样式 WSDL文档内容 <message name="myMethodRequest">
<part name="x" type="xsd:int"/> </message> <message name="empty"/> <portType name="PT"> <operation name="myMethod"> <input message="myMethodRequest"/> <output message="empty"/> </operation> </portType>

81 rpc/encoded样式 SOAP文档内容 <soap:envelope> <soap:body>
<myMethod> <x xsi:type="xsd:int">5</x> </myMethod> </soap:body> </soap:envelope>

82 2 rpc/literal样式 WSDL文档内容 <message name="myMethodRequest">
<part name="x" type="xsd:int"/> </message> <message name="empty"/> <portType name="PT"> <operation name="myMethod"> <input message="myMethodRequest"/> <output message="empty"/> </operation> </portType>

83 2 rpc/literal样式 SOAP文档内容 <soap:envelope> <soap:body>
<myMethod> <x>5</x> </myMethod> </soap:body> </soap:envelope>

84 3 document /encoded WSDL文档内容 <types> <schema>
<element name="xElement" type="xsd:int"/> </schema> </types> <message name="myMethodRequest"> <part name="x" element="xElement"/> </message> <message name="empty"/> <portType name="PT"> <operation name="myMethod"> <input message="myMethodRequest"/> <output message="empty"/> </operation> </portType>

85 3 document /encoded SOAP文档内容 <soap:envelope> <soap:body>
<xElement xsi:type="xsd:int ">5</xElement> </soap:body> </soap:envelope>

86 4.document /literal WSDL文档内容 <type> <schema>
<element name="xElement" type="xsd:int"/> </schema> </types> <message name="myMethodRequest"> <part name="x" element="xElement"/> </message> <message name="empty"/> <portType name="PT"> <operation name="myMethod"> <input message="myMethodRequest"/> <output message="empty"/> </operation> </portType>

87 4.document /literal SOAP文档内容 <soap:envelope> <soap:body>
<xElement>5</xElement> </soap:body> </soap:envelope>

88 5 document / literal-wrap
<message name="myMethodRequest"> <part name=" parameters" element=" myMethod"/> </message> <message name="empty"/> <portType name="PT"> <operation name="myMethod"> <input message="myMethodRequest"/> <output message="empty"/> </operation> </portType> WSDL文档 <types> <schema> <element name="myMethod"/> <complexType> <sequence> <element name="x" type="xsd:int"/> </sequence> </complexType> </element> </schema> </types>

89 5 document / literal-wrap
SOAP文档 <soap:envelope> <soap:body> <myMethod> <x>5</x> </myMethod> </soap:body> </soap:envelope>

90 Thank You !


Download ppt "Web服务."

Similar presentations


Ads by Google