[018] Android開發之WebService介紹

來源:互聯網
上載者:User

 

轉自 :http://blog.csdn.net/lyq8479/article/details/6420398

      經常有網友問:“在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,簡易物件存取通訊協定 (SOAP))是一種輕量級的、簡單的、基於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文檔:
      

view plaincopy to
clipboardprint?
  1. <?xml version="1.0" encoding="utf-8" ?>  
  2. <wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"  
  3.     xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"  
  4.     xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"  
  5.     xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"  
  6.     xmlns:tns="http://WebXml.com.cn/"  
  7.     xmlns:s="http://www.w3.org/2001/XMLSchema"  
  8.     xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"  
  9.     xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"  
  10.     targetNamespace="http://WebXml.com.cn/"  
  11.     xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">  
  12.     <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">  
  13.         <a href="http://www.webxml.com.cn/" mce_href="http://www.webxml.com.cn/" target="_blank">WebXml.com.cn</a>  
  14.         <strong>國內手機號碼歸屬地查詢WEB服務</strong>,提供最新的國內手機號碼段歸屬地資料,每月更新。<br />  
  15.         使用本站 WEB 服務請註明或連結本站:<a href="http://www.webxml.com.cn/" mce_href="http://www.webxml.com.cn/" target="_blank">http://www.webxml.com.cn/  
  16.         </a>感謝大家的支援!<br />   
  17.     </wsdl:documentation>  
  18.     <wsdl:types>  
  19.         <s:schema elementFormDefault="qualified" targetNamespace="http://WebXml.com.cn/">  
  20.             <s:element name="getMobileCodeInfo">  
  21.                 <s:complexType>  
  22.                     <s:sequence>  
  23.                         <s:element minOccurs="0" maxOccurs="1" name="mobileCode" type="s:string" />  
  24.                         <s:element minOccurs="0" maxOccurs="1" name="userID" type="s:string" />  
  25.                     </s:sequence>  
  26.                 </s:complexType>  
  27.             </s:element>  
  28.             <s:element name="getMobileCodeInfoResponse">  
  29.                 <s:complexType>  
  30.                     <s:sequence>  
  31.                         <s:element minOccurs="0" maxOccurs="1" name="getMobileCodeInfoResult" type="s:string" />  
  32.                     </s:sequence>  
  33.                 </s:complexType>  
  34.             </s:element>  
  35.             ... ...  
  36.         </s:schema>  
  37.     </wsdl:types>  
  38.     ... ...  
  39. </wsdl:definitions>  

<?xml version="1.0" encoding="utf-8" ?><br /><wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"<br />xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"<br />xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"<br />xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"<br />xmlns:tns="http://WebXml.com.cn/"<br />xmlns:s="http://www.w3.org/2001/XMLSchema"<br />xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"<br />xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"<br />targetNamespace="http://WebXml.com.cn/"<br />xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"><br /><wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"><br /><a href="http://www.webxml.com.cn/" mce_href="http://www.webxml.com.cn/" target="_blank">WebXml.com.cn</a><br /><strong>國內手機號碼歸屬地查詢WEB服務</strong>,提供最新的國內手機號碼段歸屬地資料,每月更新。<br /><br />使用本站 WEB 服務請註明或連結本站:<a href="http://www.webxml.com.cn/" mce_href="http://www.webxml.com.cn/" target="_blank">http://www.webxml.com.cn/<br /></a>感謝大家的支援!<br /> <br /></wsdl:documentation><br /><wsdl:types><br /><s:schema elementFormDefault="qualified" targetNamespace="http://WebXml.com.cn/"><br /><s:element name="getMobileCodeInfo"><br /><s:complexType><br /><s:sequence><br /><s:element minOccurs="0" maxOccurs="1" name="mobileCode" type="s:string" /><br /><s:element minOccurs="0" maxOccurs="1" name="userID" type="s:string" /><br /></s:sequence><br /></s:complexType><br /></s:element><br /><s:element name="getMobileCodeInfoResponse"><br /><s:complexType><br /><s:sequence><br /><s:element minOccurs="0" maxOccurs="1" name="getMobileCodeInfoResult" type="s:string" /><br /></s:sequence><br /></s:complexType><br /></s:element><br />... ...<br /></s:schema><br /></wsdl:types><br />... ...<br /></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,並取得返回結果。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.