为什么使用 WSDL? http://zx/saasservice/MainOneService.asmx
像 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"指元素的属性。于是: