700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Web services详解 :入门必看 | WSDL SOAP

Web services详解 :入门必看 | WSDL SOAP

时间:2022-03-11 03:37:06

相关推荐

Web services详解 :入门必看 | WSDL SOAP

文章目录

概念交互过程Web services 三种基本元素:SEI和CXFWSDL概念WSDL文档结构``**Operation**(操作)``***binding*** 元素***soap:binding*** 元素***operation*** 元素WSDL1.2语法示例图解SOAP概述结构语法规则soap:encodingStyle``````Fault 元素的子元素:SOAP Fault 代码

概念

Web Service是基于网络的、分布式的模块化组件,通过 Web 进行发布、查找和使用**。**是应用程序组件使用开放协议进行通信, 是独立的(self-contained)并可自我描述, 可通过使用UDDI来发现,可被其他应用程序使用。

其实WebService就是一种跨编程语言和跨操作系统平台的远程调用技术(RPC的一种实现方式)

交互过程

Web Services 都是放在Web服务器(如IIS)的。

WebService服务器端首先要通过一个WSDL文件来说明自己有什么服务可以对外调用,并注册到UDDI服务器,以便被人查找。

客户根据 WSDL 描述文档,使用XML封装一个 SOAP 请求消息,嵌入在一个HTTP POST请求中,发送到 Web 服务器来。

Web 服务器再把这些请求转发给 Web Services 请求处理器。

由请求处理器解析收到的 SOAP 请求,调用 Web Services,然后再生成相应的 SOAP 应答。

Web 服务器得到 SOAP 应答后,会再通过 HTTP应答的方式把信息送回到客户端。

Web services 三种基本元素:

SOAP (简易对象访问协议)UDDI (通用描述、发现及整合) UDDI是一种由 WSDL 描述的网络服务接口目录,通过它,企业可注册并搜索 Web services。UDDI是统一描述、发现和集成(Universal Description, Discovery, and Integration)的缩写。它是一个基于 XML 的跨平台的描述规范,可以使世界范围内的企业在互联网上发布自己所提供的服务。UDDI 指通用的描述、发现以及整合(Universal Description, Discovery and Integration)。UDDI 是一种用于存储有关 web services 的信息的目录。UDDI 经由 SOAP 进行通迅。UDDI 被构建于 Microsoft .NET 平台之中。 WSDL (Web services 描述语言)

SEI和CXF

SEI:WebService EndPoint Interface(终端,WebService的终端接口),就是WebService服务器端用来处理请求的接口;我们可以理解为是xxxWebService的各个xxxWebServiceImpl实现类

CXF:Celtix + XFire,一个apache的用于开发webservice服务器端和客户端的框架

WSDL

/wenzhi2321/article/details/68486526

/antLaddie/p/14968268.html

概念

WSDL (Web services 描述语言)

是基于 XML 的用于描述 Web Services 以及如何访问 Web Services 的语言。WSDL 指网络服务描述语言WSDL 使用 XML 编写WSDL 是一种 XML 文档WSDL 用于描述网络服务WSDL 也可用于定位网络服务WSDL 还不是 W3C 标准

WSDL文档结构

⼀个WSDL⽂档通常包含8个重要的元素,即definitions、types、import、message、portType、operation、binding、service元素。

<portType>

portType使用operation描述一个个的操作(接口)。

Operation(操作)

WSDL定义了四种操作:

1.单向(one-way):仅服务端接收请求/消息;

2.请求-响应(request-response):服务端接收请求/消息,并响应相关消息;

3.要求-响应(solicit-response):服务端发送请求/消息,并等待接收一个响应;

4.通知(notification):仅服务端发送请求/消息。

示例1:接受一个newTermValues类型的输入参数,没有输出<message name="newTermValues"><part name="term" type="xs:string"/><part name="value" type="xs:string"/></message><portType name="glossaryTerms"><operation name="setTerm"><input name="newTerm" message="newTermValues"/></operation></portType >示例2:接受一个getTermRequest类型的输入参数,输出一个getTermResponse类型参数<message name="getTermRequest"><part name="term" type="xs:string"/></message> <message name="getTermResponse"><part name="value" type="xs:string"/></message> <portType name="glossaryTerms"><operation name="getTerm"><input message="getTermRequest"/><output message="getTermResponse"/></operation></portType>还有两种操作类型:Solicit-response此操作可发送一个请求,并会等待一个响应。Notification此操作可发送一条消息,但不会等待响应。

<binding>

将⼀个抽象portType映射到⼀组具体协议(SOAO和HTTP)、消息传递样式、编码样式

binding元素

两个属性:

name 属性(定义 binding 的名称)type 属性(指向绑定的portType端口)

soap:binding元素

两个属性:

style 属性可取值 “rpc” 或 “document”transport 属性定义了要使用的 SOAP 协议。在这个例子中我们使用 HTTP。

operation元素

定义了每个接口的 SOAP 行为、输入和输出编码等,在这个例子中我们使用了 "literal"编码

<binding type="glossaryTerms" name="b1"><soap:binding style="document" transport="/soap/http" /><operation><soap:operationsoapAction="/getTerm" /><input><soap:body use="literal" /></input><output><soap:body use="literal" /></output></operation></binding><message name="getTermRequest"><part name="term" type="xs:string" /></message><message name="getTermResponse"><part name="value" type="xs:string" /></message><portType name="glossaryTerms"><operation name="getTerm"><input message="getTermRequest" /><output message="getTermResponse" /></operation></portType>

WSDL1.2语法示例

<!-- 定义wsdl名称、命名空间等,1、xmlns:xxx:引用,相当于Java里面的import;2、name:SEI定义名称;3、targetNamespace:命名空间,相当于Java里面的package --><wsdl:definitions name="nmtoken"? targetNamespace="uri"><!-- 导入其他WSDL文档,location为文档wsdl地址,namespace为指向的wsdl的命名空间 --><import namespace="uri" location="uri"/> *<!-- documentation用于声明注释 --><wsdl:documentation .... /> ?<!-- 定义数据类型 --><wsdl:types> ?<wsdl:documentation .... /> ?<xs:schema> <!--定义一个复杂类型,但此类型为空(就是说countAllStudent方法为空参数)--><xs:complexType name="countAllStudent"><xs:sequence/></xs:complexType></xs:schema></wsdl:types><!-- 定义接口参数 --><wsdl:message name="ncname"> *<wsdl:documentation .... /> ?<!-- element:引用指定的类型,类型在types中定义 --><part name="ncname" element="qname"? type="qname"?/> *</wsdl:message><!-- 接口集合 --><wsdl:portType name="ncname"> *<wsdl:documentation .... /> ?<!-- 定义某接口的输入、输出、报错信息 --><wsdl:operation name="ncname"> *<wsdl:documentation .... /> ?<wsdl:input message="qname"> ?<wsdl:documentation .... /> ?</wsdl:input><wsdl:output message="qname"> ?<wsdl:documentation .... /> ?</wsdl:output><wsdl:fault name="ncname" message="qname"> *<wsdl:documentation .... /> ?</wsdl:fault></wsdl:operation></wsdl:portType><wsdl:serviceType name="ncname"> *<wsdl:portType name="qname"/> +</wsdl:serviceType><!-- 将⼀个抽象portType映射到⼀组具体协议(SOAO和HTTP)、消息传递样式、编码样式,1、name:实现类名称;2、type:指定一个portType --><wsdl:binding name="ncname" type="qname"> <!-- 绑定什么类型的数据用来请求响应,style:绑定的数据是一个document(就是xml格式类型的请求响应) --><soap:binding transport="/soap/http" style="document"/><wsdl:documentation .... /> ?<-- binding details --> *<!-- 用来指定SEI中的处理请求的方法,一般分为请求和响应,name:SEI实现类里的具体实现方法 --><wsdl:operation name="ncname"> *<wsdl:documentation .... /> ?<-- binding details --> *<!-- 指定客户端请求和服务端响应过来的数据类型,use:定义类型literal(文本) --><wsdl:input> ?<wsdl:documentation .... /> ?<-- binding details --></wsdl:input><wsdl:output> ?<wsdl:documentation .... /> ?<-- binding details --> *</wsdl:output><wsdl:fault name="ncname"> *<wsdl:documentation .... /> ?<-- binding details --> *</wsdl:fault></wsdl:operation></wsdl:binding><!-- 定义binding的部署信息 --><wsdl:service name="ncname" serviceType="qname"> *<wsdl:documentation .... /> ?<!-- 每个port指定一个SEI的实现类,绑定一个binding,表示一个Web服务,binding:引用具体的<binding/>标签,name:具体的实现类对象 --><wsdl:port name="ncname" binding="qname"> *<wsdl:documentation .... /> ?<-- address details --><!-- 用来说明当前WebService的请求地址 --> <soap:address location="xxx"/></wsdl:port></wsdl:service></wsdl:definitions>

图解

SOAP

概述

SOAP (简易对象访问协议)

SOAP 指简易对象访问协议SOAP是一种通信协议SOAP用于应用程序之间的通信SOAP 是一种用于发送消息的格式SOAP 被设计用来通过因特网进行通信SOAP 独立于平台SOAP 独立于语言SOAP基于 XMLSOAP 很简单并可扩展SOAP 允许您绕过防火墙SOAP 将作为 W3C 标准来发展

结构

一条 SOAP 消息就是一个普通的 XML 文档,包含下列元素:

必需的 Envelope元素,可把此 XML 文档标识为一条 SOAP 消息可选的 Header 元素,包含头部信息必需的 Body元素,包含所有的调用和响应信息可选的 Fault 元素,提供有关在处理此消息所发生错误的信息

<?xml version="1.0"?><soap:Envelopexmlns:soap="/2001/12/soap-envelope"soap:encodingStyle="/2001/12/soap-encoding"><soap:Header>......</soap:Header><soap:Body>......<soap:Fault>......</soap:Fault></soap:Body></soap:Envelope>

语法规则

必须用 XML 来编码必须使用 SOAP Envelope 命名空间/2001/12/soap-envelope必须使用 SOAP Encoding 命名空间/2001/12/soap-encoding不能包含 DTD 引用不能包含 XML 处理指令

soap:encodingStyle

soap:encodingStyle用于定义在文档中使用的数据类型。此属性可用在任何 SOAP 元素中,并会被应用到元素的内容及元素的所有子元素上。

<soap:Header>

如果使用 Header 元素,则它必须是 Envelope 元素的第一个子元素。

<soap:Body>

Body 元素可包含打算传送到消息最终端点的实际 SOAP 消息。

<soap:Fault>

Fault 元素用于指示错误消息,使用时必须是 Body 元素的子元素。

在一条 SOAP 消息中,Fault 元素只能出现一次。

Fault 元素的子元素:
SOAP Fault 代码

在下面定义的 faultcode 值必须用于描述错误时的 faultcode 元素中:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。