每学一个东西,我们首先要搞清楚为什么要学,有什么用?没有用的东西我们学他干什么呢
一张图告诉你web service是干什么的
1、web service 的组成
soap 简单对象访问协议UDDI 通用描述、发现及整合
WSDL web service 描述语言
2、WSDL的文档构成
<portType> web service 执行的操作
<message> web service 使用的消息
<types> web service 使用的数据类型
<binding> web service 使用的通信协议
[eg.]
一个 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>
(1)<portType>
此元素可比作传统编程语言中的一个函数库(或一个模块、或一个类)。
(2)<message>
此元素定义一个操作的数据元素。
可以把这些部件比作传统编程语言中一个函数调用的参数。
(3)<types>
此元素定义 web service 使用的数据类型。
(4)<binding>
此元素为每个端口定义消息格式和协议细节。
[详细例子:]
这是某个 WSDL 文档的简化的片段:
<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>
其中 :
<operation> 是可操作的函数
input 是输入的参数
output 则是返回的输出结果
即:glossaryTerms 是一个函数库,
而 "getTerm" 是带有输入参数 "getTermRequest"
和返回参数 getTermResponse 的一个函数。
3、WSDL定义的四种类型
One-way 此操作可接受消息,但不会返回响应。
Request-response 此操作可接受一个请求并会返回一个响应
Solicit-response 此操作可发送一个请求,并会等待一个响应。
Notification 此操作可发送一条消息,但不会等待响应。
(1)第一种是只有input 没有 output
(2)第二种是既有input 又有output
后两种不常用,不做介绍
【1】一个 one-way 操作的例子:
<message name="newTermValues">
<part name="term" type="xs:string"/>
<part name="value" type="xs:string"/>
</message>
<portType name="glossaryTerms">
<operation name="setTerm">
<input name="newTerm" message="newTermValues"/>
</operation>
</portType >
在这个例子中,端口 "glossaryTerms" 定义了一个名为 "setTerm"
的 one-way 操作。这个 "setTerm" 操作可接受新术语表项目消息
的输入,这些消息使用一条名为 "newTermValues" 的消息,
此消息带有输入参数 "term" 和 "value"。不过,
没有为这个操作定义任何输出。
【2】一个 request-response 操作的例子:
<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>
在这个例子中,端口 "glossaryTerms" 定义了一个名为 "getTerm"
的 request-response 操作。"getTerm" 操作会请求一个名
为 "getTermRequest" 的输入消息,此消息带有一个名为 "term"
的参数,并将返回一个名为 "getTermResponse" 的输出消息,
此消息带有一个名为 "value" 的参数。
【3】绑定到 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>
binding 元素有两个属性 - name 属性和 type 属性。
name 属性定义 binding 的名称,而 type 属性指向用于 binding 的端口,
在这个例子中是 "glossaryTerms" 端口。
soap:binding 元素有两个属性 - style 属性和 transport 属性。
style 属性可取值 "rpc" 或 "document"。
在这个例子中我们使用 document。
transport 属性定义了要使用的 SOAP 协议。
在这个例子中我们使用 HTTP。
operation 元素定义了每个端口提供的操作符。
对于每个操作,相应的 SOAP 行为都需要被定义。
同时您必须如何对输入和输出进行编码。
在这个例子中我们使用了 "literal"。