常常有網友問:「在Android平臺如何調用WebService」?通過溝通我發現,甚至有些朋友連什麼是WebSerivce都不知道就在問怎麼使用,更別說和WebService有關的SOAP、WSDL這類「火星」名詞了。因此,我就想在講解Android平臺如何調用WebSerivce以前,先來介紹下WebService,看看它到底有多神祕。
記得個人碩士論文題目中就包含「Web Service」這個詞,當時仍是花了大量時間去研究Web Service在系統集成、企業應用整合方面的應用;在工做中,接觸的幾個項目全都用到了Web Service;如今在工做之餘抽點時間學習Android,又是Web Service。看來Web Service真是無處不在,有編程語言的地方,總能找到它的身影(提示:若是你之前沒接觸過WebService,這裏須要知道WebService並非Android的專利,10幾年前就已經出現了)。
根據W3C的定義,Web Services(Web服務)是一個用於支持網絡間不一樣機器互操做的軟件系統,它是一種自包含、自描述和模塊化的應用程序,它能夠在網絡中被描述、發佈和調用,能夠將它看做是基於網絡的、分佈式的模塊化組件。
Web Services是創建在通用協議的基礎之上,如HTTP、SOAP、UDDI、WSDL等,這些協議在操做系統、編程語言和對象模型的選擇上沒有任何傾向,所以有着很強的生命力。
Web Services的優點在於提供了不一樣應用程序平臺之間的互操做,它使得基於組件的開發和Web相結合的效果達到最佳。它是基於HTTP協議的,調用請求和迴應消息均可以穿過防火牆,不須要更改防火牆的設置,這樣就避免了使用特殊端口進行通訊時沒法穿越防火牆的問題。
簡單的理解:一般咱們所說的WebService都是遠程的某個服務器對外公開了某種服務,或者理解爲對外公開了某個功能或者方法,而咱們能夠經過編程來調用該服務以得到咱們須要的信息。例如:www.webxml.com.cn對外公開了手機號碼歸屬地查詢服務,咱們只須要在調用該服務時傳入一個手機號段(號碼),就能當即獲取該號段的歸屬地信息。
更通俗的理解:經過使用WebService,咱們可以像調用本地方法同樣去調用遠程服務器上的方法。咱們並不須要關心遠程的那個方法是Java寫的,仍是PHP或C#寫的;咱們並不須要關心遠程的方法是基於Unix平臺,仍是Windows平臺,也就是說WebService與平臺和語言無關。
說到WebSerivce,就必需要知道SOAP和WSDL,它們到底和WebSerice有着怎麼的關係?上面已經提到,Web Services是創建在HTTP、SOAP、WSDL等通用協議的基礎之上。
SOAP(Simple Object Access Protocol,簡單對象訪問協議)是一種輕量級的、簡單的、基於XML的協議,被設計用於在分佈式環境中交換格式化和固化信息的簡單協議。也就是說,要進行通訊,進行數據訪問傳輸,就必須依賴於必定的協議,而SOAP正是WebService通訊中所依賴的一種協議。目前常用的SOAP協議有兩個版本:SOAP 1.1 和 SOAP 1.2。
WSDL(Web Services Description Language,即Web服務描述語言)是一種用來描述Web服務的XML語言,它描述了Web服務的功能、接口、參數、返回值等,便於用戶綁定和調用服務。它以一種和具體語言無關的方式定義了給定Web服務調用和應答的相關操做和消息。
WSDL是咱們可以實實在在看到的東西,它是一份xml文檔,用於描述某個WebSerivce的方方面面。例如,上面曾提到www.webxml.com.cn網站提供了手機號碼歸屬地查詢的WebSerivce,咱們怎麼來使用這個WebSerivce呢?它是基於哪一個版本的SOAP協議?調用它須要傳入什麼參數?它會返回什麼值?是一個字符串仍是xml文檔?這一系列的問題都能在WSDL中找到答案。上面這個服務的WSDL地址是:http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl,在瀏覽器上訪問它,你將會看到以下所示的xml文檔:
<?xml version="1.0" encoding="utf-8" ?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
xmlns:tns="http://WebXml.com.cn/"
xmlns:s="http://www.w3.org/2001/XMLSchema"
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
targetNamespace="http://WebXml.com.cn/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<a href="http://www.webxml.com.cn/" mce_href="http://www.webxml.com.cn/" target="_blank">WebXml.com.cn</a>
<strong>國內手機號碼歸屬地查詢WEB服務</strong>,提供最新的國內手機號碼段歸屬地數據,每個月更新。<br />
使用本站 WEB 服務請註明或連接本站:<a href="http://www.webxml.com.cn/" mce_href="http://www.webxml.com.cn/" target="_blank">http://www.webxml.com.cn/
</a>感謝你們的支持!<br />
</wsdl:documentation>
<wsdl:types>
<s:schema elementFormDefault="qualified" targetNamespace="http://WebXml.com.cn/">
<s:element name="getMobileCodeInfo">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="mobileCode" type="s:string" />
<s:element minOccurs="0" maxOccurs="1" name="userID" type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="getMobileCodeInfoResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="getMobileCodeInfoResult" type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
... ...
</s:schema>
</wsdl:types>
... ...
</wsdl:definitions>
看到WSDL後,咱們能從中獲得哪些信息呢?
1)從第08行能夠看出,該WebSerivce所基於的SOAP協議版本是SOAP1.2;
2)從第10行能夠看出,該WebSerivce的命名空間(NameSpace)是http://WebXml.com.cn/;
3)從第20行能夠看出,咱們查詢手機號碼歸屬地時要調用的方法名稱爲:getMobileCodeInfo;
4)從第23-24行能夠看出,咱們調用getMobileCodeInfo方法時須要傳入兩個參數:mobileCode和userId;
5)從第31行能夠看出,調用getMobileCodeInfo方法後,將返回一個名爲getMobileCodeInfoResult的結果字符串。
到這裏,咱們已經初步認識了WebSerivce,以及SOAP和WSDL。這些知識具有後,就能夠開始WebService相關的開發工做了。下一篇文章將講解如何在Android平臺編程調用上面的這個WebSerivce,見http://www.linuxidc.com/Linux/2011-07/38859.htm並取得返回結果。
本篇文章來源於 Linux公社網站(www.linuxidc.com) 原文連接:http://www.linuxidc.com/Linux/2011-07/38860.htm