什么是wsdl

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是wsdl相关的知识,希望对你有一定的参考价值。

我知道wsdl与远程方法调用有关的一个xml文档,也看过百度百科中的介绍,但由于水平有限,看的我云里雾里。我想知道到底什么是wsdl,他具体是怎样的一种文档,在通过接口调用远程方法时,在哪个步骤起作用,起什么样的作用,希望哪位高手能给与我简要的回答(虽然我知道这可能很使人为难),谢谢!

读懂WSDL
1. WSDL 是什么

WSDL 指网络服务描述语言 (Web Services Description Language)。 是一种使用 XML 编写的文档。这种文档可描述某个 Web service。它可规定服务的位置,以及此服务提供的操作(或方法)。

2. WSDL 文档结构

WSDL 文档是利用这些主要的元素来描述某个 web service 的:
元素
定义

<portType>
最重要的 WSDL 元素,它可描述一个 web service可被执行的操作以及相关的消息。
可以把 <portType> 元素比作传统编程语言中的一个函数库(或一个模块、或一个类)。

<message>
用于描述一个操作的数据元素。每个消息均由一个或多个部件组成。可以把这些部件比作传统编程语言中一个函数调用的参数。

<types>
web service 使用的数据类型定义。为了最大程度的平台中立性,WSDL 使用 XML Schema 语法来定义数据类型。

<binding>
web service 使用的通信协议元素。为每个端口定义消息格式和协议细节。

一个 WSDL 文档的主要结构
l 抽象定义
Types 独立与机器和语言的类型定义
Messages 包括函数参数(输入与输出分开)或文档描述
PortTypes 引用消息部分中消息定义来描述函数签名(操作名、输入参数、输出参数)
2 具体定义
Bindings PortTypes部分的每一操作在此绑定实现
Services 确定每一绑定的端口地址
文档形式为:
<definitions>

<types>
definition of types........
</types>

<message>
definition of a message....
</message>

<portType>
definition of a port.......
</portType>

<binding>
definition of a binding....
</binding>

</definitions>
WSDL 文档可包含其它的元素,比如 extension 元素,以及一个 service 元素,此元素可把若干个 web services 的定义组合在一个单一的 WSDL 文档中。

2.1.WSDL文档实例

欢迎光临DIY部落,点击这里查看更多文章教程......

参考地址:http://www.diybl.com/course/3_program/java/javajs/2008315/104672.html

WSDL概述
WSDL就是描述XML Web服务的标准XML格式,WSDL由Ariba、Intel、IBM和微软等开发商提出。它用一种和具体语言无关的抽象方式定义了给定Web服务收发的有关操作和消息。就其定义来说,你还不能把WSDL当作一种对象接口定义语言,例如,CORBA或COM等应用程序体系结构就会用到对象接口定义语言。 WSDL保持协议中立,但它确实内建了绑定SOAP的支持,从而同SOAP建立了不可分割的联系。所以,当我在这篇文章中讨论WSDL的时候,我会假定你把SOAP作为了你的通讯协议。

————————————————————————————
WSDL协议已经被提交给了Internet标准组织W3C审批,目前还处于“确认提交”状态。W3C维持着正规的标准化系统同时提交提案必须经过确定的一套批准过程才能最终成为官方协议。在这种情况下,WSDL的地位,照外行看,至少标准组织在考虑让其成为将来可能标准中的一部分。如果你对这方面的情况感兴趣,或碰巧是一位特关心结果的“失眠症患者”,那么你不妨到W3C网站上去读读有关的建议标准。

用WSDL说明服务
作为一种基于XML的标准,如果你对XML具有一定的了解,那么WSDL的结构对你就不会陌生了。WSDL文档由服务用来描述数据类型的一组元素、服务可以收到的“消息”以及关联每条消息的SOAP绑定组成。

清单A就是一份简单的WSDL文档,该文档同W3C网站公布的WSDL示范文本是一样的,它说明了一种股票行情服务(这也是相当标准的一种Web服务)。

再仔细阅读清单A,你可以看到,文档首先以标准的XML头开头,其中包含了一个版本标识,而文档的根元素则被称为definitions。

Definitions元素可以采用若干种可选属性,这些属性说明文档同时定义文档其余部分使用的名称空间(namespace)。在这种情况下,定义被分配了一个名字(StockQuote),某些名称空间定义是根据以下常规前缀缩写制定的:

tns—“this namespace”的缩写,包含被定义服务的主名称空间
xsdl—XML Schema (XSD)名称空间,用于定义文档中的类型
soap—SOAP绑定采用的名称空间
接下来,为了定义服务的接口需要在type元素内定义所需要的任何复杂类型。这里你必须注意使用标准的XSD句法(属性),它是创造数据类型定义最为适合的方法。不过,如果你愿意,WSDL也能扩展使用不同的类型定义系统。

消息概述
按WSDL的用法,消息可以是传递给某一服务公布对象上的方法的任何参数或者方法被调用之后的任何返回结果。为了继续使用股票行情这个Web服务例子,单一定义方法多半如以下伪代码所示:

floatgetLastTradePrice(string tickerSymbol)

这样,就像你从清单A所看到的那样,文档中定义了两条消息,一条代表方法的输入参数tickerSymbol(GetLastTradePriceInput消息)另一条代表该方法的返回值(GetLastTradePriceResult消息)——最新的股票价格。

操作把消息组织到一起而且抽象地代表方法定义。在我们的例子中,这两条消息都在 GetLastTradePrice操作元素下的getLastTradePrice对象方法定义中组织起来。在一个 WSDL文件中的所有操作又都挨个在portType元素内分组。

WSDL文档的余下部分采用服务器上的侦听端点(binding 元素)绑定消息同时把端口定义同单一服务实体(service元素)组合起来。清单A的例子就定义了通过SOAP采用服务所需要的绑定。

WSDL工具
你可以手工创建WSDL文件,不过,你还可以采用相当多的工具通过WSDL来为你自动处理和定义Web服务。推荐工具软件如下:

Omniopera—一图形用户界面的WSDL、XML和XSD编辑器
Microsoft的SOAP Toolkit—一种工具包,其中包括根据WSDL定义创建COM接口的向导程序,还包括根据COM接口创建WSDL的向导程序
IBM的Web Services Toolkit—一种工具包,其中包括产生WSDL和SOAP部署说明的向导程序

参考网址:
http://iask.sina.com.cn/b/11632650.html
参考技术A 你可能会自己写一套文档,
你甚至可能会口头上告诉需要使用你的Web
service的人。这些非正式的方法至少都有一个严重的问题:
程序员坐到电脑前,想要使用你的Web
service的时候,他们的工具(如Visual
Studio)无法给他们提供任何帮助,
因为这些工具根本就不了解你的Web
service。解决方法是:
用机器能阅读的方式提供一个正式的描述文档。Web
service描述语言(WSDL)
就是这样一个基于XML的语言,用于描述Web
service及其函数、参数和返回值。因为是基于XML的,
所以WSDL既是机器可阅读的,又是人可阅读的,
这将是一个很大的好处。一些最新的开发工具
既能根据你的Web
service生成WSDL文档,又能导入WSDL文档,
生成调用相应Web
service的代码。
==============================
==============================
====================================WSDL用来提供对服务的描述
,它的主要构成要素有五个:
1)Types:
定义WSDL定义中所用到的数据类型,即XML
Schema
Types
2)Message
:
对一组消息的输入和输出参数的定义
参考技术B wsdl是一个接口描述 主要是给用户生成客户端用的 依据wsdl的描述 (参数 ,服务名之类) 在客户端生成调用服务器接口的方法 wsdl只是一个接口服务描述本回答被提问者采纳 参考技术C   wsdl:
  网络服务描述语言是Web Service的描述语言,它包含一系列描述某个web service的定义。
  一、组成:
  WSDL 文档可以分为两部分。顶部分由抽象定义组成,而底部分则由具体描述组成。
  二、元素:
  WSDL 元素基于XML语法描述了与服务进行交互的基本元素:
  Type(消息类型):数据类型定义的容器,它使用某种类型系统(如 XSD)。
  Message(消息):通信数据的抽象类型化定义,它由一个或者多个 part 组成。
  Part:消息参数
  Operation(操作):对服务所支持的操作进行抽象描述,WSDL定义了四种操作: 1.单向(one-way):端点接受信息;
  2.请求-响应(request-response):端点接受消息,然后发送相关消息;
  3.要求-响应(solicit-response):端点发送消息,然后接受相关消息;
  4.通知(notification):端点发送消息。
  Port Type(端口类型):特定端口类型的具体协议和数据格式规范。
  Binding:特定端口类型的具体协议和数据格式规范。
  Port:定义为绑定和网络地址组合的单个端点。
  Service:相关端口的集合,包括其关联的接口、操作、消息等。

什么是对 WSDL 契约的非破坏性或向后兼容的更改?

【中文标题】什么是对 WSDL 契约的非破坏性或向后兼容的更改?【英文标题】:What are considered non-breaking or backwards-compatible changes to a WSDL contract? 【发布时间】:2012-02-05 21:36:16 【问题描述】:

This page 列出了以下示例:

向现有 WSDL 文档添加新的 WSDL 操作 在 WSDL 文档中添加新的 XML 模式类型,这些类型不包含在以前存在的类型中

但是有没有定义或标准 哪些更改被认为是向后兼容的指南。或者换句话说,您可以对合同进行哪些更改,并且仍然希望不会破坏您的客户。

【问题讨论】:

【参考方案1】:

附加的可选请求元素 (minoccurs=0) 也可以向后兼容 - 这取决于主机端的服务实现。 此外,将强制响应元素更改为可选 可能 也可以向后兼容 - 这取决于您的客户端的实现。

这个区域很棘手。

如果您真的担心向后兼容性,请考虑为新客户端创建新版本的服务,并为现有客户端保留现有实现。此外,一般来说,避免通过您的服务发送域对象 - 使用 DTO。

希望这会有所帮助。

【讨论】:

是的,它似乎是一个灰色区域。我也会考虑添加向后兼容的可选参数。只是想知道是否有一些关于你可以做出的改变的普遍协议,并且仍然期望客户也能工作。诚然,总是可以有一个新版本,但如果没有必要,我宁愿避免这种情况。 我不知道有一个标准文档或一般协议来定义您可以摆脱什么并且仍然支持向后兼容性。即使你确实有一个 WSDL,底层实现仍然必须支持它(我想我是说 WSDL 本身并不一定告诉消费者关于应该如何使用服务以及应该做什么的完整故事期望在响应中)。如果我是你,并且我想保证向后兼容性,我会实施新版本的服务。【参考方案2】:

我在这个特定的主题上花了一些时间,并在 Thomas Erl 的一本书中找到了一些指导方针,我在底部提到了这些指导方针。这是他们要说的话;

兼容更改

添加新的 WSDL 操作定义和关联的消息定义 添加新的 WSDL 端口类型定义和关联的操作定义 添加新的 WSDL 绑定和服务定义 向消息定义添加新的可选 XML Schema 元素或属性声明 减少消息定义类型的 XML Schema 元素或属性的约束粒度 向消息定义类型添加新的 XML Schema 通配符 添加新的可选 WS-Policy 断言 添加新的 WS-Policy 替代方案

不兼容的更改

重命名现有 WSDL 操作定义 删除现有的 WSDL 操作定义 更改现有 WSDL 操作定义的 MEP 向现有 WSDL 操作定义添加故障消息 向消息中添加新的必需 XML 模式元素或属性声明 定义 增加 XML Schema 元素或属性声明的约束粒度 消息定义 重命名消息中的可选或必需的 XML 架构元素或属性 定义 删除可选或必需的 XML 架构元素或属性或通配符 来自消息定义 添加新的必需 WS-Policy 断言或表达式 添加新的可忽略的 WS-Policy 表达式(大部分时间)

Thomas Erl 等人有一本关于这个特定主题的好书;名称是面向 SOA 的 Web 服务合同设计和版本控制。

HTH。

免责声明:正如我所提到的,这是本书作者所做的工作,我只是分享它。无论如何,我也不隶属于;只是喜欢这本书:)

【讨论】:

您好,我认为第 4 项“添加新的可选 XML 架构”绝对不能向后兼容。它仅适用于请求消息。如果您的客户端应用最佳实践并在运行时对 XML 响应启用 XSD 验证,那么任何新的可选标记都将被拒绝。请收下 我同意 Aerosteaks 的评论。向后兼容性应该建模为一个包含三列的矩阵:类似于 TypeOfChange、IsRequestMessageBackwardCompatible、IsResponseMessageBackwardCompatible 还可以通过在响应末尾添加 来实现前向兼容性。有了这个,他们可以在未来扩展。但这是不应该被过度使用的东西。 是否有客户端(库)会在运行时检查 WSDL,如果更改则失败,即使更改向后兼容?

以上是关于什么是wsdl的主要内容,如果未能解决你的问题,请参考以下文章

关于 wsdl2Java 自动生成客户端调取webservice接口

什么是帧数?什么是FPS?什么是PING?什么是延迟?什么是延时?什么是延迟时间?什么是时延?.

什么是PP,PE.什么是均聚..什么是共聚..什么是嵌段..什么是无规,什么是注塑。什么是吹膜..什

时间是什么?时间同步是什么?GPS北斗卫星授时又是什么?

什么是拉电流,什么是灌电流?什么是吸收电流 ?

在java中,OOA是什么?OOD是什么?OOP是什么?