WSDL简介及编写步骤

简介--摘自百度百科

WSDL

Web Services Description Language的缩写,是一个用来描述Web服务和说明如何与Web服务通信的XML语言。为用户提供详细的接口说明书。

1基本信息

WSDL 简介

WSDL是 Web Service的描述语言,是一种接口定义语言,用于描述Web Service的接口信息等。
WSDL文档可以分为两部分。顶部分由抽象定义组成,而底部分则由具体描述组成

WSDL 历史

在 2001 年 3 月,WSDL 1.1 被 IBM、 微软作为一个 W3C纪录(W3C note)提交到有关 XML协议的 W3C XML 活动,用于描述网络服务。(W3C 纪录仅供讨论。一项 W3C 纪录的发布并不代表它已被 W3C 或 W3C 团队亦或任何 W3C 成员认可。)在 2002 年 7 月,W3C 发布了第一个 WSDL 1.2 工作 草案

WSDL 元素

WSDL 元素 [1] 基于XML语法描述了与服务进行交互的基本 元素
Type(消息类型): 数据类型定义的容器,它使用某种类型系统(如XSD)。
Message(消息):通信数据的抽象类型化定义,它由一个或者多个part组成。
Part:消息参数
Operation(操作):对服务所支持的操作进行抽象描述,WSDL定义了四种操作: 1.单向(one-way):端点接受信息;2.请求-响应(request-response):端点接受消息,然后发送相关消息;3.要求-响应(solicit-response):端点发送消息,然后接受相关消息;4.通知(notification

[2]

):端点发送消息。
Port Type (端口类型):特定端口类型的具体协议和 数据格式规范。
Binding:特定端口类型的具体协议和 数据格式规范
Port:定义为绑定和 网络地址组合的单个端点。
Service:相关端口的集合,包括其关联的接口、操作、消息等。

2结构功能

WSDL 文档结构

WSDL 文档是利用这些主要的 元素来描述某个 web service 的:
元素定义
web service 执行的操作
<message> web service 使用的消息
<types> web service 使用的 数据类型
<binding> web service 使用的 通信协议
一个 WSDL 文档的主要结构是类似这样的:
<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 文档中。
如需完整的语法概述,请访问 WSDL 语法 这一节。同样要记住,与服务交互所需的所有细节都位于其 WSDL 文件中。
●WSDL支持的消息交换方式?
WSDL支持4种消息交换方式:
1)单向(One-way):服务端接收消息;
2)请求响应(Request-response):服务端点接收请求消息,然后发送响应消息;
3)要求应答(Solicit-response):服务访问端发送要求消息,然后接收 应答消息
4)通知(Notification):服务访问端点发送通知消息。
WSDL文档可以分为两部分。顶部分由抽象定义组成,而底部分则由具体描述组成 [3]
抽象部分以独立于平台和语言的方式定义SOAP消息,它们并不包含任何随机器或语言而变的元素。这就定义了一系列服务,截然不同的网站都可以实现。随网站而异的东西如序列化便归入底部分,因为它包含具体的定义。
l 抽象定义
Types
独立与机器和语言的类型定义
Messages
包括函数参数(输入与输出分开)或文档描述
PortTypes
引用消息部分中消息定义来描述函数签名(操作名、输入参数、输出参数)
2 具体定义
Bindings
PortTypes部分的每一操作在此绑定实现
Services
确定每一绑定的端口地址

WSDL 功能

怎样向别人介绍你的Web service有什么功能,以及每个 函数调用时的参数呢?你可能会自己写一套文档,你甚至可能会口头上告诉需要使用你的Web service的人。这些非正式的方法至少都有一个严重的问题:当程序员坐到电脑前,想要使用你的Web service的时候,他们的工具(如Visual Studio)无法给他们提供任何帮助,因为这些工具根本就不了解你的Web service。解决方法是:用机器能阅读的方式提供一个正式的描述文档。Web service描述语言(WSDL)就是这样一个基于XML的语言,用于描述Web service及其 函数、参数和返回值。因为是基于XML的,所以WSDL既是机器可阅读的,又是人可阅读的,这将是一个很大的好处。一些最新的开发工具既能根据你的Web service生成WSDL文档,又能导入WSDL文档,生成调用相应Web service的代码。
HTML
XHTML    HTML 5    CSS    TCP/IP
XML
XML    XSL    XSLT    XSL-FO    XPath    XPointer    XLink    DTD    XML Schema    DOM    XForms    SOAP    WSDL   RDF    RSS    WAP    Web Services
Web脚本
JavaScript    HTML DOM    DHTML    VBScript    AJAX    jQuery    JSON    E4X    WMLScript
Serv脚本
SQL    ASP    ADO    PHP
.NET
多媒体
SMIL    SVG
参考资料
相关文献



编写步骤

说明:本文意译自BPEL1.1规范16.2节。

本文讨论一个简单的贷款审批的WEB服务的例子。在该例子中,客户发送贷款审批请求,包括客户个人信

息和贷款金额。贷款审批的WEB服务利用该信息运行一个简单流程,得到“同意贷款”或“拒绝贷款”的

结果。对于低于10000美元的贷款和有良好信用的客户,审批是自动的。对于高额贷款和信用不确定的客

户,我们需要用到另外两个WEB服务提供的功能。“风险评估服务”用来查询某个个人的信用风险,“专

家评估服务”用来获得专家对该项目的具体评估意见。

1。服务描述
我们假定已经存在xmlns:lns="http://loans.org/wsdl/loan-approval",服务描述文件如下:
<definitions 
      targetNamespace="http://loans.org/wsdl/loan-approval"
      xmlns="http://schemas.xmlsoap.org/wsdl/"
      xmlns:xsd="http://www.w3.org/2001/XMLSchema"    
     xmlns:plnk="http://schemas.xmlsoap.org/ws/2003/05/partner-link/"      
      xmlns:lns="http://loans.org/wsdl/loan-approval">

H:信用信息消息。消息相当于我们的值对象。
<message name="creditInformationMessage">
   <part name="firstName" type="xsd:string"/>
   <part name="name" type="xsd:string"/>
   <part name="amount" type="xsd:integer"/>
</message>
H:审批消息
<message name="approvalMessage">
   <part name="accept" type="xsd:string"/>
</message>
H:风险评估消息
<message name="riskAssessmentMessage">
   <part name="level" type="xsd:string"/>
</message>   
H:错误消息
<message name="errorMessage">
   <part name="errorCode" type="xsd:integer"/>
</message>

H:把portType理解为我们的OO中的方法吧!它指定了输入,输出,出错处理。
<portType name="loanServicePT">
   <operation name="request">
      <input message="lns:creditInformationMessage"/>
      <output message="lns:approvalMessage"/>
      <fault name="unableToHandleRequest" 
             message="lns:errorMessage"/>
   </operation>
</portType>

<portType name="riskAssessmentPT">
   <operation name="check">
      <input message="lns:creditInformationMessage"/>
      <output message="lns:riskAssessmentMessage"/>
      <fault name="loanProcessFault" 
             message="lns:errorMessage"/>
   </operation>
</portType>

<portType name="loanApprovalPT">
   <operation name="approve">
      <input message="lns:creditInformationMessage"/>
      <output message="lns:approvalMessage"/>
      <fault name="loanProcessFault" 
             message="lns:errorMessage"/>
   </operation>
</portType>     

H:partnerLinkType用来区分角色。
<plnk:partnerLinkType name="loanPartnerLinkType">
   <plnk:role name="loanService">
       <plnk:portType name="lns:loanServicePT"/>
   </plnk:role>
</plnk:partnerLinkType>

<plnk:partnerLinkType name="loanApprovalLinkType">
   <plnk:role name="approver">
       <plnk:portType name="lns:loanApprovalPT"/>
   </plnk:role>   
</plnk:partnerLinkType>

<plnk:partnerLinkType name="riskAssessmentLinkType">
   <plnk:role name="assessor">
       <plnk:portType name="lns:riskAssessmentPT"/>
   </plnk:role>   
</plnk:partnerLinkType>

</definitions>

我们以上面的案例来说明.

1)声明名称空间
必须在 <definitions> 元素中提供各种名称空间的声明.
<definitions 
      targetNamespace="http://loans.org/wsdl/loan-approval"
      xmlns="http://schemas.xmlsoap.org/wsdl/"
      xmlns:xsd="http://www.w3.org/2001/XMLSchema"    
      xmlns:plnk="http://schemas.xmlsoap.org/ws/2003/05/partner-link/"      
      xmlns:lns="http://loans.org/wsdl/loan-approval">
三个必须做的外部名称空间声明是 WSDL、SOAP 和 XSD(XML 模式定义)
xmlns="http://schemas.xmlsoap.org/wsdl/"是WSDL名称空间
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 是SOAP名称空间,这里因为是用做BPEL4WS,所以

不需要该名称空间
xmlns:xsd="http://www.w3.org/2001/XMLSchema"是XSD名称空间

2)编写服务
<definitions> 元素包含一个或多个 <portType> 元素,实际上,每个元素都是您希望表示的一系列

operation。或者,您也可以将单个 portType 元素看作是将各种方法组成类的一个逻辑分组。我们称

portType为服务---这就是"WEB服务"这个名称的由来.
<portType name="loanServicePT">
   <operation name="request">
      <input message="lns:creditInformationMessage"/>
      <output message="lns:approvalMessage"/>
      <fault name="unableToHandleRequest" 
             message="lns:errorMessage"/>
   </operation>
</portType>
可以看出,portType是operation的集合.一个operation是一个方法,那一个portType不就是一个类吗?一个

类,我们可以看作一个服务.


3)指定参数
operation指定了输入的参数和输出的参数,在 WSDL 术语中,所有参数称为“消息”。
<message name="creditInformationMessage">
   <part name="firstName" type="xsd:string"/>
   <part name="name" type="xsd:string"/>
   <part name="amount" type="xsd:integer"/>
</message>
一个消息可以有多个part元素,part元素指定名称和类型.

4)与SOAP绑定
WSDL以一种抽象方式定义了操作和消息,而不考虑实现的细节。实际上,WSDL 的任务是定义或描述 Web

服务,然后提供一个对外部框架的引用来定义 WSDL 用户将如何实现这些服务。可以将这个框架当作

WSDL 抽象定义和它们的实现之间的“绑定(binding)”。一般是与SOAP绑定,当然,也不是必须的.

5)指定实现
当您在 UDDI 注册中心发布 Web 服务时,会使用它.
最后两个步骤把WSDL与SOAP/UDDI结合起来了.




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值