php学习之路:WSDL详细解释(两)
3.定义服务使用的逻辑消息
当服务的操作被调用时。服务被定义为消息交换。在wsdl文档中,这些消息被定义message元素。
这些消息由称之为part元素的部分组成。
一个服务的操作,通过指定逻辑消息的方式来定义。当操作被调用时,逻辑消息被交换。(也就是说。逻辑消息代表了服务的操作)这些逻辑消息,将在网络上传输的数据定义为xml文档。他包括了全部的參数,这些參数是方法调用的一部分。
(也就是说。逻辑消息里的參数,是操作相应方法的參数集合)
消息和參数列表:每个被服务暴露的操作能且仅能有一个输入消息和一个输出消息。
输入消息定义当操作被调用时。服务接受的全部消息。输出消息定义的是。当操作完毕时服务返回的全部消息。fault消息定义的是服务返回错误时的数据。
另外,每一个操作能够有一定数量的fault消息。
这个fault消息定义了当服务错误发生时返回的数据。这些消息通常有一个部分。该部分提供足够的信息来让消费者知道错误是什么。
消息设计用于集成固有系统:假设你将已经存在的应用程序定义为一个服务。你必须确保方法(实现操作的方法)中使用到的每一个參数都可以在消息中找到相应。你必须确保返回值也在操作的输出消息中。
定义你的消息的一个方法是:RPC风格。当使用RPC风格时,你使用给每一个在參数列表中的參数定义一个part。每一个消息part是基于在types中顶一个的type。
你的输入消息为每一个输入參数相应一个part,相同输出消息为每一个输出參数相应一个part。
另外添加个part来相应返回值。假设一个參数既是输入,又是输出。那么它即作为输入又作为输出消息列出来。
RPC风格的消息定义是当服务使能存量系统时实用。
它使用类似于TIBCO或者CORBA的模式传输。
这些系统环绕着过程和方法来设计。正是因为这样,他们是最easy使用消息来建模。
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>
样例:如果你有一个server存储了个人信息而且提供一个方法,该方法换回雇员的数据,基于雇员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详细解释(两)的更多相关文章
- Java学习之路:详细解释Java解析XML四种方法
XML如今已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便. 对于XML本身的语法知识与技术细节,须要阅读相关的技术文献,这里面包含的内容有DO ...
- JavaFX学习之路:详细解释JavaFX架构和框架
JavaFX 2.0平台是基于Java技术的富client平台.它使应用程序开发人员更加easy的开发和部署跨平台的富互联网应用(RIA).JavaFX 2.0文档包括了JavaFX 2.0所提供的功 ...
- mybatis学习之路----批量更新数据两种方法效率对比
原文:https://blog.csdn.net/xu1916659422/article/details/77971696/ 上节探讨了批量新增数据,这节探讨批量更新数据两种写法的效率问题. 实现方 ...
- 初次踏上GUI编程之路(有点意思,详细介绍了菜鸟的学习之路)
初次踏上GUI编程之路 —— 我的Qt学习方法及对Qt认识的不断转变 -> 开始接触GUI与开始接触Qt: 话说,我第一次看见“Qt”这一个名词,好像是在CSDN网站的主页上吧,因为CSDN好像 ...
- Spring学习13-中IOC(工厂模式)和AOP(代理模式)的详细解释
我们是在使用Spring框架的过程中,其实就是为了使用IOC,依赖注入,和AOP,面向切面编程,这两个是Spring的灵魂. 主要用到的设计模式有工厂模式和代理模式. IOC是工厂模式参考:设计模式- ...
- webService学习之路(三):springMVC集成CXF后调用已知的wsdl接口
webService学习之路一:讲解了通过传统方式怎么发布及调用webservice webService学习之路二:讲解了SpringMVC和CXF的集成及快速发布webservice 本篇文章将讲 ...
- Linux学习笔记15——GDB 命令详细解释【转】
GDB 命令详细解释 Linux中包含有一个很有用的调试工具--gdb(GNU Debuger),它可以用来调试C和C++程序,功能不亚于Windows下的许多图形界面的调试工具. 和所有常用的调试工 ...
- C加加学习之路 2——两招让你成为牛X的T型人才
有个小伙伴在微信上问我: 我刚工作半年,有时候对于Java的发展方向有点迷茫,Java的范围是在是太广了,我有时候会不知道从哪开始入手,我想问一下,您有什么好的建议吗? 我理解这位朋友的问题是:工作中 ...
- OpenGL学习之路(四)
1 引子 上次读书笔记主要是学习了应用三维坐标变换矩阵对二维的图形进行变换,并附带介绍了GLSL语言的编译.链接相关的知识,之后介绍了GLSL中变量的修饰符,着重介绍了uniform修饰符,来向着色器 ...
随机推荐
- Google Earth数据存储、管理、表现及开发机制
Google Earth数据存储.管理.表现及开发机制 一. Google Earth(Map)介绍 1.1 Google Earth介绍 在众多的地理信息服务提供商中,Google是较早 ...
- Balsamiq Mockups注册码
Name: personalKey: eJzzzU/OLi0odswsqilILSrOz0vMqbFEAjXONYY1fu6ufgA/CA4X Name: helloWorldKey: eJzzzU/ ...
- java.lang.NullPointerException错误分析
java.lang.NullPointerException是什么错误 你使用了空的指针.在java中虽然号称抛弃了C++中不安全的指针,但其实他所有的东西你都可以理解为指针.这种情况一般发生在你使用 ...
- Android onTouch、OnLongClick、onClick和ScrollView滑动事件冲突
为了实现近期录制的长按,松开手指,结束录制功能.在项目,难道你去走一走会头晕,书写demo为了下一个梳理. 顺便研究android事件调用机制. 先上效果界面: 布局: <RelativeLay ...
- Python学习入门基础教程(learning Python)--3.3.3 Python逻辑关系表达式
在if分支判断语句里的条件判断语句不一定就是一个表达式,可以是多个(布尔)表达式的组合关系运算,这里如何使用更多的关系表达式构建出一个比较复杂的条件判断呢?这里需要再了解一下逻辑运算的基础知识.逻辑关 ...
- JavaScript类数组对象参考
JavaScript和DOM中有很多类数组对象,它们有以下特点 1.有length属性 2.可以使用[]通过下标访问 3.部分类数组对象使用[]访问成员时不只可以使用下标,还可以使用id或name 4 ...
- Uva11464 开关问题
给一个n×n的01矩阵,你的任务是将尽量少的0变成1,是的每个元素的上下左右的位置(如果存在的话)的之和均为偶数.1<=n<=15. 如果暴力整个矩阵,那么时间复杂度是O(2^(n*n)) ...
- 为应用程序池“XX”提供服务的进程在与 Windows Process Activation Service 通信时出现严重错误
场景 WCF应用程序部署在IIS7中,使用net.tcp协议对外给几百台客户端提供服务,应用程序池不断崩溃重启. 分析过程 在事件查看器中看到的错误信息类似于 为应用程序池“XX”提供服务的进程在与 ...
- 鸟书shell 学习笔记(一) shell专注于概念和命令
变量 variableName=value 等号左右不能有空格 变量内容有空格须要用"或者'括起来,可是 v="hello $name" $保持原有功能,单引號则不行 ...
- 重新想象 Windows 8 Store Apps (9) - 控件之 ScrollViewer 基础
原文:重新想象 Windows 8 Store Apps (9) - 控件之 ScrollViewer 基础 [源码下载] 重新想象 Windows 8 Store Apps (9) - 控件之 Sc ...