一 . WebService 概念
WebSerivce 是通過一系列標(biāo)準(zhǔn)和協(xié)議來保證程序之間動(dòng)態(tài)連接,即分布式服務(wù)組件。本質(zhì)上就是要以標(biāo)準(zhǔn)話的形式實(shí)現(xiàn)企業(yè)內(nèi)外部各個(gè)不同服務(wù)系統(tǒng)之間的互調(diào)或集成。其中最 基本的協(xié)議包裹:SOAP(WebService之間的基本通信協(xié) 議),WSDL(WebService描述語言,它定義了WebSerivce 是做什么的,怎么做和查詢的信息),UDDI(用于集中存放和查找WSDL描述文件,起著目錄服務(wù)器的作用)。
1. SOAP. Simple Object Access Protocol
SOAP是消息傳遞的協(xié)議,它規(guī)定了Web Serivces之間是怎樣傳遞消息的。簡(jiǎn)單的說,SOAP規(guī)定了:
1). 傳遞的消息格式是XML。使Web Services 可以在任何平臺(tái),任何語言實(shí)現(xiàn)。
2). 遠(yuǎn)程對(duì)象方法調(diào)用的格式。 規(guī)定了怎樣表示被調(diào)用對(duì)象及調(diào)用的方法名和參數(shù)類型。
3). 參數(shù)類型和XML格式之間的映射,被調(diào)用的方法有時(shí)候需要傳遞一個(gè)復(fù)雜的參數(shù),例如,一個(gè)Customer對(duì)象,怎樣用XML來表示一個(gè)對(duì)象參數(shù),也是SOAP所定義的范圍
例如:<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="................../">
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="...................">
<soapenv:Header/>
<soapenv:Body>
<web:addNewCustomer>
<!--Optional:-->
<arg0>
<id>?</id>
<!--Optional:-->
<lastUpdatedDate>?</lastUpdatedDate>
<!--Optional:-->
<name>?</name>
</arg0>
</web:addNewCustomer>
</soapenv:Body>
</soapenv:Envelope>
4). 異常處理以及其他的相關(guān)信息
2. WSDL.Web Services Description Language
是Web Services的定義語言 。是基于XML格式的關(guān)于WEB服務(wù)的描述語言,主要的目的在于為別人提供你實(shí)現(xiàn)某種服務(wù)的有關(guān)內(nèi)容,也即為了讓別的程序調(diào)用,你必須告訴大家你的服務(wù)接 口,例如服務(wù)名稱,服務(wù)所在的機(jī)器名稱,監(jiān)聽端口,傳遞參數(shù)的類型,個(gè)數(shù),順序等等,這樣別人才能調(diào)用 你的服務(wù)。使用者使用者通過這個(gè)wsdl文檔,創(chuàng)建想用的SOAP請(qǐng)求信息,通過HTTP傳遞web Service 提供者,Web 服務(wù)器在完成服務(wù)請(qǐng)求之后,將SOAP返回消息傳回請(qǐng)求者,服務(wù)請(qǐng)求者在根據(jù)wsdl文檔將SOAP消息解析成自己能夠理解的內(nèi)容。
例如: CustomerService.wsdl ,CustomerService_schema1.xsd(省落)
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.3.1-hudson-749-SNAPSHOT. -->
<definitions targetNamespace=".............." name="CustomerService" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="..........." xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<types>
<xsd:schema>
<xsd:import namespace="...................." schemaLocation="CustomerService_schema1.xsd"/>
</xsd:schema>
</types>
<message name="addNewCustomerResponse">
<part name="parameters" element="tns:addNewCustomerResponse"/>
</message>
<portType name="CustomerService">
<operation name="addNewCustomer">
<input message="tns:addNewCustomer"/>
<output message="tns:addNewCustomerResponse"/>
</operation>
</portType>
<binding name="CustomerServicePortBinding" type="tns:CustomerService">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
<operation name="addNewCustomer">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="CustomerServiceService">
<port name="CustomerServicePort" binding="tns:CustomerServicePortBinding">
<soap:address location="REPLACE_WITH_ACTUAL_URL"/>
</port>
</service>
</definitions>
注意: Types :數(shù)據(jù)類型的定義容器,它使用某種類型系統(tǒng)(一般使用XML Schema中的類型系統(tǒng)。例如這里面就是)
Message :通信消息的數(shù)據(jù)結(jié)構(gòu)的抽象類型化定義。使用Types所定義的類型來定義整個(gè)消息的數(shù)據(jù)結(jié)構(gòu)(例如:CustomerService_schema1.xsd)。
PortType:對(duì)于每個(gè)訪問入口類型所支持的操作的抽象幾個(gè),這些操作可以由一個(gè)或多個(gè)訪問服務(wù)點(diǎn)來支持。
Operation: 對(duì)服務(wù)中所支持的操作的抽象描述,一般單個(gè)Operation描述了一個(gè)訪問入口的請(qǐng)求/響應(yīng)消息對(duì)。例如:
<operation name="addNewCustomer">
<input message="tns:addNewCustomer"/>
<output message="tns:addNewCustomerResponse"/>
</operation>
中有input/outPut消息對(duì)。
Binding: 特定端口類型的具體協(xié)議和數(shù)據(jù)格式規(guī)范的綁定
Port : 定義為協(xié)議/數(shù)據(jù)格式綁定與具體的Web訪問地址組合的單個(gè)服務(wù)訪問點(diǎn)
Service:相關(guān)服務(wù)訪問點(diǎn)的集合。
3. UDDI .Universal Description, Discovery, and Integration
簡(jiǎn)單說,UDDI用于集中存放和查找WSDL描述文件,起著目錄服務(wù)器的作用。
二 . Web service 生命期
見圖:http://gceclub.sun.com.cn/staticcontent/html/java/webservices_for/webservice_for_html_m126e0ad.gif
下面描述了XML Web service 調(diào)用時(shí)發(fā)生事件的序列:
1. 客戶端建立了新的XML Web service 服務(wù)代理類實(shí)例,此實(shí)例對(duì)象駐留在客戶端的計(jì)算機(jī)中。
2. 客戶端調(diào)用一個(gè)代理類的方法。
3. 客戶計(jì)算機(jī)的底層結(jié)構(gòu)序列化XML Web service 方法的參數(shù)為SOAP消息,并通過網(wǎng)絡(luò)將其發(fā)送到XML Web service 服務(wù)端。
4. 在服務(wù)端的底層結(jié)構(gòu)及收到SOAP消息,并房序列化為XML。建立一個(gè)類的實(shí)例來完成XML Web service,調(diào)用XML Web service 方法并傳遞XML參數(shù)。
5. XML Web service 方法執(zhí)行,最終設(shè)置返回值和輸出參數(shù)。
6. XML Web service 服務(wù)方的底層結(jié)構(gòu)將返回值和數(shù)除參數(shù)序列化為SOAP消息。并通過網(wǎng)絡(luò)發(fā)回客戶端。
7. 客戶端的底層結(jié)構(gòu)接收到上面的SOAP消息,反序列化XML為返回值和輸出參數(shù)。并將其傳遞給代理類實(shí)例。
8. 客戶端接受到返回式和輸出參數(shù)webService 實(shí)現(xiàn)的例子。
1.實(shí)現(xiàn)一個(gè)WebService,使其能夠接受和響應(yīng)SOAP消息
2.撰寫一個(gè)WSDL文件用于描述此Web Services。
3.將此WSDL發(fā)布到UDDI上
4. 其他的應(yīng)用程序(客戶端)從UDDI上搜索倒你的WSDL
5.根據(jù)你的WSDL,客戶端編寫程序調(diào)用Web Service.