php学习之道:WSDL详解(二)

3.定义服务使用的逻辑消息

当服务的操作被调用时,服务被定义为消息交换。在wsdl文档中,这些消息被定义message元素。这些消息由称之为part元素的部分组成。

一个服务的操作,通过指定逻辑消息的方式来定义。当操作被调用时,逻辑消息被交换。(也就是说,逻辑消息代表了服务的操作)这些逻辑消息,将在网络上传输的数据定义为xml文档。他包含了所有的参数,这些参数是方法调用的一部分。(也就是说,逻辑消息里的参数,是操作对应方法的参数集合)

消息和参数列表:每一个被服务暴露的操作能且仅能有一个输入消息和一个输出消息。输入消息定义当操作被调用时,服务接受的所有消息。输出消息定义的是,当操作完成时服务返回的所有消息。fault消息定义的是服务返回错误时的数据。

另外,每个操作可以有一定数量的fault消息。这个fault消息定义了当服务发生错误时返回的数据。这些消息通常有一个部分,该部分提供足够的信息来让消费者知道错误是什么。

消息设计用于集成固有系统:如果你将已经存在的应用程序定义为一个服务,你必须确保方法(实现操作的方法)中使用到的每个参数都能够在消息中找到对应。你必须确保返回值也在操作的输出消息中。

定义你的消息的一个方法是:RPC风格。当使用RPC风格时,你使用给每个在参数列表中的参数定义一个part。每个消息part是基于在types中顶一个的type。

你的输入消息为每个输入参数对应一个part,同样输出消息为每个输出参数对应一个part。另外增加个part来对应返回值。如果一个参数既是输入,又是输出,那么它即作为输入又作为输出消息列出来。

RPC风格的消息定义是当服务使能存量系统时有用。它使用类似于TIBCO或者CORBA的模式传输。这些系统围绕着过程和方法来设计。正是由于这样,他们是最容易使用消息来建模。RPC风格也是服务和应用程序之间的映射清晰化。

为SOAP服务设计消息:当RPC风格用于建模存量系统,但是服务协会强烈地喜欢包装文档风格。在包装文档风格中,每个消息有一个part。这个消息的part参考了一个包装元素,该元素定义在types元素中。包装元素有如下特性:

  • 他是一个包含一系列元素的复合类型
  • 如果是一个输入消息的包装器,则:它的每个元素对应一个输入参数;他的名字,他的名字与相关的操作名相同。
  • 如果是一个输出消息的包装器,则:它的每个元素对应输入参数,也对应输出参数。它的第一个元素代表了方法返回值。他的名字将通过增加Response到与之想关联的包装器的操作的名字上。

消息命名:每个消息都在其命名空间中有唯一名字,建议使用下面的命名规则:

  • 消息应该被单一操作使用
  • 输入消息名是在操作名后增加Request
  • 输出消息名是在操作名后增加Response
  • 错误消息名是在错误原因后加fault

消息部件:消息部件是逻辑消息最常用的单元。每个part被定义,用part元素。并且通过name属性,用type属性或element属性来指定数据类型。

消息允许重用part名。对于一个实例来说,如果一个方法有一个参数:foo,他被应用或者通过in/out传递,他能够作为一个Part存在于请求或者应答消息中。如下例:

<message name="fooRequest">

<part name="foo" type="xsd:int"/>

<message>

<message name="fooReply">

<part name="foo" type="xsd:int"/>

<message>

例子:假设你有一个服务器存储了个人信息并且提供一个方法,该方法换回雇员的数据,基于雇员ID.。该方法如下:

personalInfo lookup(long empId)

被映射到RPC风格的WSDL如下

<message name="personalLookupRequest">

<part name="empId" type="xsd:int"/>

<message/>

<message name="personalLookupResponse>

<part name="return" element="xsd1:personalInfo"/>

<message/>

映射到包装风格如下:

<types>

<schema ...>

...

<element name="personalLookup">

<complexType>

<sequence>

<element name="empID" type="xsd:int" />

</sequence>

</complexType>

</element>

<element name="personalLookupResponse">

<complexType>

<sequence>

<element name="return" type="personalInfo" />

</sequence>

</complexType>

</element>

</schema>

</types>

<message name="personalLookupRequest">

<part name="empId" element="xsd1:personalLookup"/>

<message/>

<message name="personalLookupResponse>

<part name="return" element="xsd1:personalLookupResponse"/>

<message/>

php学习之道:WSDL详解(二),布布扣,bubuko.com

时间: 2024-10-13 22:50:05

php学习之道:WSDL详解(二)的相关文章

JavaFX学习之道:详解JavaFX架构与框架

JavaFX 2.0平台是基于Java技术的富客户端平台.它使应用程序开发者更加容易的开发和部署跨平台的富互联网应用(RIA).JavaFX 2.0文档包含了JavaFX 2.0所提供的功能的概述. 图1描述了JavaFX 2.0平台的架构组件.后面的部分将对每一个组件进行逐一的描述.在JavaFX通用API的下面是用来运行JavaFX代码的引擎.这个引擎包括以下子组件:JavaFX高性能图形引擎(Prism);新的更小但更有效率的窗体系统(Glass);媒体引擎和Web引擎.虽然这些组件不是包

Android 布局学习之——Layout(布局)详解二(常见布局和布局参数)

[Android布局学习系列]   1.Android 布局学习之——Layout(布局)详解一   2.Android 布局学习之——Layout(布局)详解二(常见布局和布局参数)   3.Android 布局学习之——LinearLayout的layout_weight属性   4.Android 布局学习之——LinearLayout属性baselineAligned的作用及baseline    Layout Parameters(布局参数): 在XML文件中,我们经常看到类似与lay

Java学习之道:详解Java解析XML的四种方法

XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便.对于XML本身的语法知识与技术细节,需要阅读相关的技术文献,这里面包括的内容有DOM(Document Object Model),DTD(Document Type Definition),SAX(Simple API for XML),XSD(Xml Schema Definition),XSLT(Extensible Stylesheet Language Transform

Shell学习之Bash变量详解(二)

Shell学习之Bash变量详解 目录 Bash变量 Bash变量注意点 用户自定义变量 环境变量 位置参数变量 预定义变量 Bash变量 用户自定义变量:在Bash中由用户定义的变量. 环境变量:这种变量中主要保存和系统操作环境相关的数据. 位置参数变量:这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的. 预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的. Bash变量注意点 1.变量名称可以由字母.数字和下划线组成,但是不能以数字

[转载] java多线程学习-java.util.concurrent详解(二)Semaphore/FutureTask/Exchanger

转载自http://janeky.iteye.com/blog/770393 ----------------------------------------------------------------------------- 3. Semaphore     我们先来学习一下JDK1.5 API中关于这个类的详细介绍: “一个计数信号量.从概念上讲,信号量维护了一个许可集.如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可.每个 release() 添加一个许可,从

php学习之道:WSDL详解(一)

WSDL文档使用web服务描述语言来定义服务. 文档包括逻辑(抽象)部分和具体部分. 抽象部分用于定义独立于实现的数据类型和消息,具体部分定义一个endpoint如何实现一个可以与外界进行交互的服务. 通常建议在写代码前定义WSDL文档和XML schema,但是这就要求对WSDL非常熟悉. 逻辑部分: 包括types,message以及portType元素.types元素中,xml schema用来定义组成消息的数据的结构.一定数量的消息元素用来定义服务所用消息的格式.portType元素包括

php学习之道:WSDL详解(三)

通过声明方式定义绑定(binding)属性 如果你在服务中采用SOAP binding,你可以使用JAX-WS来指定一定数量的属性binding.这些属性指定对应你在WSDL中指定的属性.某些设置,比如参数类型,可以约束你实现的方法,这些设置也影响声明的效用. @SOAPBinding声明,定义在javax.jws.soap.SOAPBinding接口中.它提供发布时的SOAP Binding细节.如果@SOAPBinding没有被指定,则用缺省的doc/literal SOAPBinding.

WebService中的WSDL详解

WebService中的WSDL详解 有人在WebService开发的时候,特别是和第三方有接口的时候,走的是SOAP协议,然后用户(或后台)给你一个WSDL文件(或网址),说按照上面的进行适配, 这时就要对WebService的WSDL有一定的理解,本文将对WSDL(WebService描述语言)进行详细总结. WSDL (Web Services Description Language,Web服务描述语言)是一种XML Application,他将Web服务描述定义为一组服务访问点,客户端

WSDL 详解

WSDL 详解 转载自:http://kalogen.javaeye.com/blog/418958 WSDL (Web Services Description Language,Web服务描述语言)是一种XML Application,他将Web服务描述定义为一组服务访问点,客户端可以通过这些服务访问点对包含面向文档信息或面向过程调用的服务进行访问(类似远程过程调用).WSDL首先对访问的操作和访问时使用的请求/响应消息进行抽象描述,然后将其绑定到具体的传输协议和消息格式上以最终定义具体部署