说到webservice不得不提到WSDL和SOAP两个概念。
首先我们来说说WSDL,它是干嘛用的呢?
WSDL 是一种使用 XML 编写的文档。这种文档可描述某个 Web service。它可规定服务的位置,以及此服务提供的操作(或方法)。
[b]WSDL文档结构[/b]
元素 定义
<portType> web service 执行的操作
<message> web service 使用的消息
<types> web service 使用的数据类型
<binding> web service 使用的通信协议
[table]
|元素 |定义|
|<portType> |web service 执行的操作|
|<message>|web service 使用的消息|
|<types> |web service 使用的数据类型|
|<binding> |web service 使用的通信协议|
[/table]
[b]WSDL端口[/b]
<portType>元素描述了一个webservice、可被执行的操作,以及相关的消息。
可以把它比作传统编程语言中的一个函数库(或一个模块、或一个类)。
[b]WSDL消息[/b]
<message>元素定义了一个操作的数据元素。
每个消息均由一个或者多个部件组成。可以把这些部件比作传统编程语言中一个函数调用的参数。
[b]WSDL types[/b]
<types>元素定义了webservice使用的数据类型。
为了最大程度的平台中立性,WSDL使用XML Schema语法来定义数据类型。
[b]WSDL Bindings[/b]
<binding>元素为每个端口定义消息格式和协议细节。
eg.[b]WSDL实例[/b]
说明:该例子中,<portType>元素把"glossaryTerms"定义为某个[color=red]端口[/color]的名称,把"
getTerm"定义为某个[color=red]操作[/color]的名称。
操作"getTerm"拥有一个名为"getTermRequest"的[color=red]输入消息[/color],以及一个名为"getTermResponse"的[color=red]输出消息[/color]。
<message>元素定义每个消息的部件,以及相关联的数据类型。
这里,glossaryTerms就是一个类(函数库),而"getTerm"是带有输入参数"getTermRequest"和返回参数"getTermResponse"的一个函数。
[b]
SOAP又是什么呢?[/b]
[list]
[*]SOAP 指简易对象访问协议
[*]SOAP 是一种通信协议
[*]SOAP 用于应用程序之间的通信
[*]SOAP 是一种用于发送消息的格式
[*]SOAP 被设计用来通过因特网进行通信
[*]SOAP 独立于平台
[*]SOAP 独立于语言
[*]SOAP 基于 XML
[*]SOAP 很简单并可扩展
[*]SOAP 允许您绕过防火墙
[*]SOAP 将被作为 W3C 标准来发展
[/list]
简单的说,SOAP是简易对象之间相互访问的通讯协议。
SOAP消息的基本结构
[b]SOAP Envelope元素[/b]
必须的有的。Envelope元素是SOAP消息的根元素。它可把XML文档定义为SOAP消息。
[b]SOAP Header元素[/b]
可选的,该元素可包含有关SOAP消息的应用程序专用信息(比如认证,支付等)。如果H饿啊der元素被提供,则它必须是Envelope元素的第一个子元素。
[b]
SOAP Body元素[/b]
必须的,该元素可包含打算传送到消息最终端点的实际SOAP消息。
[b]SOAP Fault 元素[/b]
可选的 SOAP Fault 元素用于指示错误消息。
如果已提供了 Fault 元素,则它必须是 Body 元素的子元素。在一条 SOAP 消息中,Fault 元素只能出现一次。
那么WSDL如何和SOAP进行绑定呢?
eg.绑定到SOAP
[b]
binding[/b]元素有两个属性"name"和"type"属性。
[b]name[/b]属性定义了binding的名称,而type属性指向用于binding的端口(即portType端口)。
[b]soap:binding[/b]元素有两个属性"style"和"transport"。
[b]
style[/b]属性可取值"rpc"或者"document"。transport属性定义了要使用的SOAP协议。
[b]operation[/b]元素定义了每个端口提供的操作符。
首先我们来说说WSDL,它是干嘛用的呢?
WSDL 是一种使用 XML 编写的文档。这种文档可描述某个 Web service。它可规定服务的位置,以及此服务提供的操作(或方法)。
[b]WSDL文档结构[/b]
元素 定义
<portType> web service 执行的操作
<message> web service 使用的消息
<types> web service 使用的数据类型
<binding> web service 使用的通信协议
[table]
|元素 |定义|
|<portType> |web service 执行的操作|
|<message>|web service 使用的消息|
|<types> |web service 使用的数据类型|
|<binding> |web service 使用的通信协议|
[/table]
[b]WSDL端口[/b]
<portType>元素描述了一个webservice、可被执行的操作,以及相关的消息。
可以把它比作传统编程语言中的一个函数库(或一个模块、或一个类)。
[b]WSDL消息[/b]
<message>元素定义了一个操作的数据元素。
每个消息均由一个或者多个部件组成。可以把这些部件比作传统编程语言中一个函数调用的参数。
[b]WSDL types[/b]
<types>元素定义了webservice使用的数据类型。
为了最大程度的平台中立性,WSDL使用XML Schema语法来定义数据类型。
[b]WSDL Bindings[/b]
<binding>元素为每个端口定义消息格式和协议细节。
eg.[b]WSDL实例[/b]
<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>
说明:该例子中,<portType>元素把"glossaryTerms"定义为某个[color=red]端口[/color]的名称,把"
getTerm"定义为某个[color=red]操作[/color]的名称。
操作"getTerm"拥有一个名为"getTermRequest"的[color=red]输入消息[/color],以及一个名为"getTermResponse"的[color=red]输出消息[/color]。
<message>元素定义每个消息的部件,以及相关联的数据类型。
这里,glossaryTerms就是一个类(函数库),而"getTerm"是带有输入参数"getTermRequest"和返回参数"getTermResponse"的一个函数。
[b]
SOAP又是什么呢?[/b]
[list]
[*]SOAP 指简易对象访问协议
[*]SOAP 是一种通信协议
[*]SOAP 用于应用程序之间的通信
[*]SOAP 是一种用于发送消息的格式
[*]SOAP 被设计用来通过因特网进行通信
[*]SOAP 独立于平台
[*]SOAP 独立于语言
[*]SOAP 基于 XML
[*]SOAP 很简单并可扩展
[*]SOAP 允许您绕过防火墙
[*]SOAP 将被作为 W3C 标准来发展
[/list]
简单的说,SOAP是简易对象之间相互访问的通讯协议。
SOAP消息的基本结构
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Header>
...
...
</soap:Header>
<soap:Body>
...
...
<soap:Fault>
...
...
</soap:Fault>
</soap:Body>
</soap:Envelope>
[b]SOAP Envelope元素[/b]
必须的有的。Envelope元素是SOAP消息的根元素。它可把XML文档定义为SOAP消息。
[b]SOAP Header元素[/b]
可选的,该元素可包含有关SOAP消息的应用程序专用信息(比如认证,支付等)。如果H饿啊der元素被提供,则它必须是Envelope元素的第一个子元素。
[b]
SOAP Body元素[/b]
必须的,该元素可包含打算传送到消息最终端点的实际SOAP消息。
[b]SOAP Fault 元素[/b]
可选的 SOAP Fault 元素用于指示错误消息。
如果已提供了 Fault 元素,则它必须是 Body 元素的子元素。在一条 SOAP 消息中,Fault 元素只能出现一次。
那么WSDL如何和SOAP进行绑定呢?
eg.绑定到SOAP
<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>
<binding type="glossaryTerms" name="b1">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http" />
<operation>
<soap:operation
soapAction="http://example.com/getTerm" />
<input>
<soap:body use="literal" />
</input>
<output>
<soap:body use="literal" />
</output>
</operation>
</binding>
[b]
binding[/b]元素有两个属性"name"和"type"属性。
[b]name[/b]属性定义了binding的名称,而type属性指向用于binding的端口(即portType端口)。
[b]soap:binding[/b]元素有两个属性"style"和"transport"。
[b]
style[/b]属性可取值"rpc"或者"document"。transport属性定义了要使用的SOAP协议。
[b]operation[/b]元素定义了每个端口提供的操作符。