没有合适的资源?快使用搜索试试~ 我知道了~
WebService描述语言WSDL详解
5星 · 超过95%的资源 需积分: 10 9 下载量 161 浏览量
2012-02-16
17:38:37
上传
评论 2
收藏 233KB PDF 举报
温馨提示
试读
23页
为什么使用WSDL? WSDL 文档结构 WSDL 文件示例 Namespaces SOAP 消息 XML schema运用于WSDL 的类型和消息中 XML schema运用之complex 类型 XML schema运用之数组 <portType >和<operation >元素 <binding>和<operation >元素 文档风格绑定 <service > 和<port >元素
资源推荐
资源详情
资源评论
Web Service 描述语言 WSDL 详解
为什么使用 WSDL?
WSDL 文档结构
WSDL 文件示例
Namespaces
SOAP 消息
XML schema 运用于 WSDL 的类型和消息中
XML schema 运用之 complex 类型
XML schema 运用之数组
<portType>和<operation>元素
<binding>和<operation>元素
文档风格绑定
<service> 和<port>元素
总结
为什么使用 WSDL?
像Internet 协议之类的标准有没有为权威所利用,或者人们这样看待它是因为顺之
所获的好处远远超出了代价?曾经有许多试图建立的标准都流产了。有时候,那些还没
有普遍使用的标准甚至由法令或政府规定强行推出:Ada 语言就是一例。
我相信正是跟随标准所带来的好处使它广泛接受。例如,对于铁路服务来说,真正
重要的是,不同公司所铺设的铁路结合到一起,或者是来自好几个公司的产品协调的工
作在一起。几家大的企业合力建立了 SOAP 标准。Web Service 描述语言(WSDL)向这
种 Web Service 的提供商和用户推出了方便的协调工作的方法,使我们能更容易的获得
SOAP 的种种好处。几家公司的铁道并在一起不算什么难事,他们所需遵循的只是两轨
间的标准距离。对 Web Service 来说,这要复杂得多。我们必须先制定出指定接口的标
准格式。
曾经有人说SOAP 并不真需要什么接口描述语言。如果 SOAP 是交流纯内容的标
准,那就需要一种语言来描述内容。SOAP 消息确实带有某些类型信息,因此 SOAP
允许动态的决定类型。但不知道一个函数的函数名、参数的个数和各自类型,怎么可能
去调用这个函数呢?没有 WSDL,我可以从必备文档中确定调用语法,或者检查消息。
随便何种方法,都必须有人参与,这个过程可能会有错。而使用了 WSDL,我就可以通
过这种跨平台和跨语言的方法使 Web Service 代理的产生自动化。就像 COM和 CORBA
的 IDL 文件,WSDL 文件由客户和服务器约定。
注意由于WSDL 设计成可以绑定除 SOAP 以外的其他协议,这里我们主要关注
WSDL 在 HTTP 上和 SOAP 的关系。同样,由于 SOAP 目前主要用来调用远程的过程
和函数,WSDL 支持 SOAP 传输的文档规范。WSDL 1.1 已经作为记录递交给 W3C(见
http://www.w3.org/TR/wsdl.html)
WSDL 文档结构
若要理解XML 文档,将之看作块状图表非常有用。下图以 XML 的文档形式说明了
WSDL 的结构,它揭示了 WSDL 文档五个栏之间的关系。
WSDL 文档可以分为两部分。顶部分由抽象定义组成,而底部分则由具体描述组成。
抽象部分以独立于平台和语言的方式定义 SOAP 消息,它们并不包含任何随机器或语
言而变的元素。这就定义了一系列服务,截然不同的网站都可以实现。随网站而异的东
西如序列化便归入底部分,因为它包含具体的定义。
l 抽象定义
Types
独立与机器和语言的类型定义
Messages
包括函数参数(输入与输出分开)或文档描述
PortTypes
引用消息部分中消息定义来描述函数签名(操作名、输入参数、输出参数)
2 具体定义
Bindings
PortTypes 部分的每一操作在此绑定实现
Services
确定每一绑定的端口地址
下面的图中,箭头连接符代表文档不同栏之间的关系。点和箭头代表了引用或使用
关系。双箭头代表"修改"关系。3-D 的箭头代表了包含关系。这样,各 Messages 栏使
用 Types 栏的定义,PortTypes 栏使用 Messages 栏的定义;Bindings 栏引用了
PortTypes 栏,Services 栏引用 Bindings 栏,PortTypes 和 Bindings 栏包含了 operation
元素,而 Services 栏包含了 port 元素。PortTypes 栏里的 operation 元素由 Bindings
栏里的 operation 元素进一步修改或描述。
在此背景中,我将使用标准的 XML 术语来描述 WSDL 文档。Element 是指 XML
的元素,而"attribute"指元素的属性。于是:
<element attribute="attribute-value">contents</element>
内容也可能由一个或多个元素以递归的方式组成。根元素是所有元素之中最高级的
元素。子元素总是从属于另一个元素,父元素。
注意,文档之中可能只有一个 Types 栏,或根本没有。所有其他的栏可以只有零元
素、单元素或是多元素。WSDL 的列表要求所有的栏以固定的顺序出现:import, types,
message, portType, binding, service。所有的抽象可以是单独存在于别的文件中,也可
以从主文档中导入。
图一:抽象定义和具体定义
WSDL 文件示例
让我们来研究一下 WSDL 文件,看看它的结构,以及如何工作。请注意这是一个非常
简单的 WSDL 文档实例。我们的意图只是说明它最显著的特征。以下的内容中包括更
加详细的讨论。
<?xml version="1.0" encoding="UTF-8" ?>
<definitions name="FooSample"
targetNamespace="http://tempuri.org/wsdl/"
xmlns:wsdlns="http://tempuri.org/wsdl/"
xmlns:typens="http://tempuri.org/xsd"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:stk="http://schemas.microsoft.com/soap-toolkit/wsdl-extension"
xmlns="http://schemas.xmlsoap.org/wsdl/">
<types>
<schema targetNamespace="http://tempuri.org/xsd"
xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
elementFormDefault="qualified" >
</schema>
</types>
<message name="Simple.foo">
<part name="arg" type="xsd:int"/>
</message>
<message name="Simple.fooResponse">
<part name="result" type="xsd:int"/>
</message>
<portType name="SimplePortType">
<operation name="foo" parameterOrder="arg" >
<input message="wsdlns:Simple.foo"/>
<output message="wsdlns:Simple.fooResponse"/>
</operation>
</portType>
<binding name="SimpleBinding" type="wsdlns:SimplePortType">
<stk:binding preferredEncoding="UTF-8" />
<soap:binding style="rpc"
transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="foo">
<soap:operation soapAction="http://tempuri.org/action/Simple.foo"/>
<input>
<soap:body use="encoded" namespace="http://tempuri.org/message/"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
</input>
<output>
<soap:body use="encoded" namespace="http://tempuri.org/message/"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
</output>
</operation>
</binding>
<service name="FOOSAMPLEService">
<port name="SimplePort" binding="wsdlns:SimpleBinding">
<soap:address location="http://carlos:8080/FooSample/FooSample.asp"/>
</port>
</service>
</definitions>
以下是该实例文档的总述:稍后我将详细讨论每一部分的细节。
第一行申明该文档是 XML。尽管这并不是必需的,但它有助于 XML 解析器决定是
否解析 WSDL 文件或只是报错。第二行是 WSDL 文档的根元素:<definitions>。一
些属性附属于根元素,就像<schema>子元素对于<types>元素。
<types>元素包含了 Types 栏。如果没有需要声明的数据类型,这栏可以缺省。
在 WSDL 范例中,没有应用程序特定的 types 声明,但我仍然使用了 Types 栏,只是
为了声明 schema namespaces。
<message>元素包含了 Messages 栏。如果我们把操作看作函数,<message
>元素定义了那个函数的参数。<message>元素中的每个<part>子元素都和某个参
数相符。输入参数在<message>元素中定义,与输出参数相隔离--输出参数有自己的
<message>元素。兼作输入、输出的参数在输入输出的<message>元素中有它们相
应的<part>元素。输出<message>元素以"Response"结尾,就像以前所用的
"fooResponse"。每个<part>元素都有名字和类型属性,就像函数的参数有参数名和
参数类型。
用于交换文档时,WSDL 允许使用<message>元素来描述交换的文档。
<part>元素的类型可以是 XSD 基类型,也可以是 SOAP 定义类型(soapenc)、
WSDL 定义类型(wsdl)或是 Types 栏定义的类型。
一个PortTypes 栏中,可以有零个、单个或多个<portType>元素。由于抽象
PortType 定义可以放置在分开的文件中,在某个 WSDL 文件中没有<portType>元素
是可能的。上面的例子里只是用了一个<portType>元素。而一个<portType>元素可
在<operation>元素中定义一个或是多个操作。示例仅使用了一个名为"foo"的<
operation>元素。这和某个函数名相同。<operation>元素可以有一个、两个、三个
子元素:<input>, <output> 和<fault>元素。每个<input>和<output>元素中的
消息都引用 Message 栏中的相关的<message>元素。这样,示例中的整个<portType
>元素就和以下的 C 函数等效:
int foo(int arg);
剩余22页未读,继续阅读
资源评论
- z5945559102012-09-28VM和instance
- 某OT2012-09-05Carlos C. Tapang的这篇文章挺有名气的,一说入门WSDL,都推荐看这篇,对于WSDL文档的讲解很细致,而且都附有说明示例,很适合新人学习
- jijie0072012-10-24适合扫盲 概念性比较多
hlj_txw
- 粉丝: 2
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功