移動(dòng)應(yīng)用開(kāi)發(fā)課件:Web服務(wù)開(kāi)發(fā)_第1頁(yè)
移動(dòng)應(yīng)用開(kāi)發(fā)課件:Web服務(wù)開(kāi)發(fā)_第2頁(yè)
移動(dòng)應(yīng)用開(kāi)發(fā)課件:Web服務(wù)開(kāi)發(fā)_第3頁(yè)
移動(dòng)應(yīng)用開(kāi)發(fā)課件:Web服務(wù)開(kāi)發(fā)_第4頁(yè)
移動(dòng)應(yīng)用開(kāi)發(fā)課件:Web服務(wù)開(kāi)發(fā)_第5頁(yè)
已閱讀5頁(yè),還剩38頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

#11Web服務(wù)開(kāi)發(fā)劉寧Email:liuning2@目錄Web服務(wù)的基本概述1iPhone平臺(tái)Web服務(wù)實(shí)現(xiàn)2Android平臺(tái)Web服務(wù)實(shí)現(xiàn)32DiagramWeb服務(wù)的核心技術(shù)及其規(guī)范Web服務(wù)的調(diào)用原理Web服務(wù)的應(yīng)用Web服務(wù)的基本概念3Web服務(wù)是創(chuàng)建可互操作的分布式應(yīng)用程序的新平臺(tái)。為了達(dá)到跨平臺(tái)操作,Web服務(wù)是完全基于XML、XSD等獨(dú)立于平臺(tái)、獨(dú)立于軟件供應(yīng)商的標(biāo)準(zhǔn)的。Web服務(wù)適用于應(yīng)用程序集成、B2B集成、代碼和數(shù)據(jù)重用,以及通過(guò)Web進(jìn)行客戶端和服務(wù)器的通信。

Web服務(wù)4Web服務(wù)一般是由企業(yè)發(fā)布的,具有特定,商業(yè)需求的在線應(yīng)用服務(wù)。應(yīng)用軟件能夠通過(guò)互聯(lián)網(wǎng)來(lái)訪問(wèn)和使用這項(xiàng)服務(wù)。Web服務(wù)的主要目標(biāo)是在不同平臺(tái)下的可操作性。

Web服務(wù)的核心技術(shù)及其規(guī)范5Web服務(wù)主要用到以下幾個(gè)核心技術(shù)和規(guī)范:XML:描述數(shù)據(jù)的標(biāo)準(zhǔn)方法SOAP:表示信息交換的協(xié)議WSDL:Web服務(wù)描述語(yǔ)言UDDI(UniversalDescription,DiscoveryandIntegration):通用描述、發(fā)現(xiàn)與集成協(xié)議,它是一種獨(dú)立于平臺(tái)的,基于XML語(yǔ)言的用于在互聯(lián)網(wǎng)上描述商務(wù)的協(xié)議Web服務(wù)的核心技術(shù)及其規(guī)范6XML(ExtensibleMarkupLanguage)可擴(kuò)展標(biāo)記語(yǔ)言XML是當(dāng)前處理結(jié)構(gòu)化文檔信息的有力工具,是網(wǎng)絡(luò)環(huán)境中跨平臺(tái)并依賴于內(nèi)容的技術(shù),是一種簡(jiǎn)單的數(shù)據(jù)存儲(chǔ)語(yǔ)言。Web服務(wù)的核心技術(shù)及其規(guī)范7SOAP(SimpleObjectAccessProtocal)

簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議SOAP技術(shù)把基于HTTP的Web技術(shù)與XML的可擴(kuò)展性相結(jié)合,實(shí)現(xiàn)異構(gòu)程序和平臺(tái)之間的互操作性,使應(yīng)用能夠被不同的用戶所訪問(wèn)。Web服務(wù)的核心技術(shù)及其規(guī)范8WSDL(WebServicesDescriptionLanguage)Web服務(wù)描述語(yǔ)言WSDL是一種用于描述Web服務(wù)的XML格式。WSDL提供服務(wù)的詳細(xì)操作信息。Web服務(wù)的核心技術(shù)及其規(guī)范9UDDI(UniversalDescription,DiscoveryandIntegration)通用描述、發(fā)現(xiàn)與集成協(xié)議UDDI是一個(gè)獨(dú)立平臺(tái)的,基于XML語(yǔ)言的注冊(cè)表和機(jī)制。注冊(cè)表記錄了互聯(lián)網(wǎng)上的商務(wù)應(yīng)用。它也提供了等級(jí)和查找Web服務(wù)應(yīng)用程序的機(jī)制。Web服務(wù)的核心技術(shù)及其規(guī)范10Web服務(wù)的架構(gòu)Web服務(wù)的核心技術(shù)及其規(guī)范11WSDLiWSDLUDDI服務(wù)協(xié)議服務(wù)請(qǐng)求者服務(wù)提供者f(x)SOAP服務(wù)提供者首先建立Web服務(wù),然后把服務(wù)發(fā)布給所有用戶。

任何平臺(tái)上的用戶可以通過(guò)閱讀其WSDL文檔生成一個(gè)SOAP請(qǐng)求消息。這個(gè)SOAP消息嵌入到一個(gè)HTTPPOST請(qǐng)求中發(fā)送到Web服務(wù)所在的Web服務(wù)器。Web服務(wù)器把請(qǐng)求轉(zhuǎn)發(fā)給Web服務(wù)請(qǐng)求處理器,請(qǐng)求處理器解析SOAP請(qǐng)求,然后調(diào)用Web服務(wù)生成相應(yīng)的SOAP應(yīng)答。Web服務(wù)器得到SOAP應(yīng)答后通過(guò)HTTP送回客戶端。

Web服務(wù)調(diào)用原理12高層接口使用高層接口,不需要知道SOAP和XML的任何信息,就可以生成和使用一個(gè)Web服務(wù)。SoapTookit2.0通過(guò)提供SoapClient和SoapServer兩個(gè)COM對(duì)象來(lái)完成這些功能。Web服務(wù)調(diào)用原理13低層接口使用低層接口必須對(duì)SOAP和XML有所了解。這種接口可以對(duì)SOAP的處理過(guò)程進(jìn)行控制,特別是要做特殊處理的時(shí)候。創(chuàng)建一個(gè)HttpConnector對(duì)象負(fù)責(zé)HTTP連接。創(chuàng)建SoapSerializer對(duì)象,用于生成SOAP消息。SOAP消息作為Playload通過(guò)HttpConnector被發(fā)送到服務(wù)端。生成呢個(gè)一個(gè)SoapReader對(duì)象,負(fù)責(zé)讀取服務(wù)端返回的SOAP消息。Web服務(wù)調(diào)用原理14Web服務(wù)的應(yīng)用范圍包括兩個(gè)方面:企業(yè)之間的應(yīng)用企業(yè)內(nèi)部的應(yīng)用Web服務(wù)的應(yīng)用15企業(yè)之間的應(yīng)用:Web服務(wù)用于電子商務(wù)應(yīng)用的標(biāo)準(zhǔn)和開(kāi)發(fā)工具。企業(yè)間的電子商務(wù)(B2B):Web服務(wù)應(yīng)用于以企業(yè)采購(gòu)、物流和分銷內(nèi)容的供應(yīng)鏈企業(yè)與消費(fèi)者之間的電子商務(wù)(B2C):Web服務(wù)應(yīng)用于涉及到零售以及中間業(yè)務(wù)的支付系統(tǒng)Web服務(wù)的應(yīng)用16企業(yè)內(nèi)部的應(yīng)用:采用中間件應(yīng)用服務(wù)器軟件作為工具將企業(yè)各項(xiàng)應(yīng)用都進(jìn)行改造和開(kāi)發(fā)企業(yè)內(nèi)部應(yīng)用軟件的網(wǎng)絡(luò)化,包括現(xiàn)在流行的ERP以及CRM等Web服務(wù)的應(yīng)用17Android平臺(tái)Web服務(wù)實(shí)現(xiàn)18第三方類庫(kù)(KSOAP2)簡(jiǎn)介KSOAP2的使用應(yīng)用實(shí)例詳解KSOAP是一個(gè)應(yīng)用于資源有限的Java環(huán)境的SAOPWeb服務(wù)客戶端庫(kù)。它一般應(yīng)用在Applets或者J2ME應(yīng)用程序。第三方類庫(kù)(KSOAP2)簡(jiǎn)介19官方網(wǎng)站:/KSOAP2還改進(jìn)了對(duì)Microsoft.Net的兼容KSOAP2的使用20SoapEnvelope與SOAP規(guī)范中的SOAPEnvelope相對(duì)應(yīng),封裝了head和body。SoapSerializationEnvelope對(duì)SoapEnvelope進(jìn)行了擴(kuò)展來(lái)支持SOAP序列化規(guī)范,能夠把簡(jiǎn)單對(duì)象自動(dòng)進(jìn)行序列化。KSOAP2的常用接口接口org.kSOAP2.SoapEnvelopeorg.kSOAP2.SoapSerializationEnvelopeorg.kSOAP2.SoapObjectorg.KSOAP2.transport.HttpTransport21SoapObject能夠構(gòu)造SOAP調(diào)用。HttpTransport屏蔽了網(wǎng)絡(luò)請(qǐng)求或訪問(wèn)以及獲取服務(wù)器SOAP的具體細(xì)節(jié)。KSOAP2的常用接口接口org.kSOAP2.SoapEnvelopeorg.kSOAP2.SoapSerializationEnvelopeorg.kSOAP2.SoapObjectorg.KSOAP2.transport.HttpTransport22利用Web服務(wù)傳遞String給MIDP(MobileInformationDeviceProfile,移動(dòng)信息設(shè)備配置文件)首先在服務(wù)器端編寫(xiě)主服務(wù)類KSOAP和Web服務(wù)服務(wù)器端PublicclasskSOAPWS{publickSOAPWS(){}publicStringWSMethod(Stringuser,Stringpwd){return“WSResponse”;}}23KSOAP調(diào)用服務(wù)器的Web服務(wù)有6步:指定Web服務(wù)的命名空間和調(diào)用方法的名稱;設(shè)置調(diào)用方法的參數(shù)(可選);生成調(diào)用Web服務(wù)的SOAP請(qǐng)求信息;指定Web服務(wù)的WSDL文檔的URL;利用call調(diào)用Web服務(wù);利用getResponse方法獲得Web服務(wù)的返回結(jié)果。KSOAP和Web服務(wù)24指定Web服務(wù)的命名空間和調(diào)用方法的名稱利用SoapObject類完成調(diào)用。ServiceNamespace–Web服務(wù)的命名空間,可從WSDL文檔中找到;MethodName–所調(diào)用方法的名字。KSOAP和Web服務(wù)SoapObjectrequest=newSoapObject(ServiceNamespace,MethodName);25設(shè)置調(diào)用方法的參數(shù)(可選),如果方法沒(méi)有參數(shù),則這一步可以省略。addProperty方法設(shè)置的參數(shù)需要與Web服務(wù)類中的方法參數(shù)順序保持一致。參數(shù)對(duì)大小寫(xiě)敏感,要與服務(wù)端一致.KSOAP和Web服務(wù)request.addProperty(“User”,“Password”);26利用SoapSerializationEnvelope對(duì)象生成調(diào)用Web服務(wù)的SOAP請(qǐng)求信息SoapEnvelope.VER11是SOAP協(xié)議的版本號(hào),該版本號(hào)要與服務(wù)器端Web服務(wù)的版本號(hào)一致;在創(chuàng)建SOAP序列化封裝對(duì)象后,需要設(shè)置屬性bodyOut為第一步的SoapObject對(duì)象。KSOAP和Web服務(wù)SoapSerializationEnvelopeen=newSoapSerializationEnvelope(SoapEnvelope.VER11);en.bodyOut=request;en.dotNet=true;/*訪問(wèn).NET的WebService必須加上這行*/27創(chuàng)建HttpTransportSE對(duì)象,通過(guò)這個(gè)對(duì)象的構(gòu)造方法指定Web服務(wù)的WSDL文檔的URL注意:模擬器訪問(wèn)本主機(jī)的IP是使用call方法調(diào)用Web服務(wù)第1個(gè)參數(shù)是完整的方法名,前面加上命名空間.第2個(gè)參數(shù)是第3步創(chuàng)建的SOAP序列化封裝對(duì)象。KSOAP和Web服務(wù)HttpTransportSEHT=newHttpTransportSE(WSDL_URL);HT.call(ServiceNamespace+MethodName,en);28使用getResponse方法獲得Web服務(wù)的返回結(jié)果返回值是對(duì)象時(shí):利用第3步創(chuàng)建的SOAP序列化封裝對(duì)象獲得的Web服務(wù)的返回結(jié)果,并強(qiáng)制類型轉(zhuǎn)換為SoapObject類。返回值是單值時(shí):利用toString()得到結(jié)果.SoapPrimitive

SO=(SoapPrimitive)en.getResponse();Stringtxt=SO.toString();/*返回值轉(zhuǎn)換成字符串*/KSOAP和Web服務(wù)SoapObjectSO=(SoapObject)en.getResponse();29KSOAP調(diào)用Web服務(wù)需要運(yùn)用HttpTransport類,實(shí)際上是調(diào)用了HttpConnection作為網(wǎng)絡(luò)連接。在KSOAP調(diào)用Web服務(wù)的時(shí)候,如果由于某種原因,Web服務(wù)不能立即返回,Android界面上的組件仍然需要處于活動(dòng)狀態(tài)供用戶使用,不能造成阻塞。為了防止UI組件的阻塞,KSOAP調(diào)用Web服務(wù)的時(shí)候,必須另起一個(gè)線程。KSOAP和Web服務(wù)30KSOAP能夠把四種SOAP類型映射為Java類型:其余類型需要進(jìn)行類型映射,把成員變量序列化為byte[],通過(guò)網(wǎng)絡(luò)傳送后再放序列化。KSOAP的類型映射SOAPTypeJavaTypexsd:intjava.lang.Integerxsd:longjava.lang.Longxsd:stringjava.lang.Stringxsd:booleanjava.lang.Boolean31在KSOAP中,利用Base64把二進(jìn)制流編碼為ASCII字符串,使二進(jìn)制數(shù)據(jù)能夠通過(guò)XML/SOAP傳輸;Org.kSOAP2.serialization中的MarshalBase64的目的就是把SOAPXML中的xsd:base64Binary元素序列化為Java字節(jié)數(shù)組類型。KSOAP2提供Marshaldate和MarshalHashtable類來(lái)把相應(yīng)的元素序列化為Java的Data和Hashtable類型。KSOAP的類型映射32通過(guò)Web服務(wù)查詢亞馬遜網(wǎng)上書(shū)店書(shū)目提交包含關(guān)鍵字的書(shū)目查詢,如果查詢成功,將會(huì)返回一系列書(shū)名節(jié)點(diǎn),每一本書(shū)都提供作者、出版社、出版日期、價(jià)格等信息書(shū)名節(jié)點(diǎn)在一個(gè)”Details”節(jié)點(diǎn)下,查詢結(jié)果的總數(shù)放在TotalResult節(jié)點(diǎn)每頁(yè)10個(gè)結(jié)果,可以通過(guò)查看TotalPages節(jié)點(diǎn)來(lái)確定需要多少頁(yè)要測(cè)試工程,必須到亞馬遜注冊(cè)獲取AccessKeyIDKSOAP應(yīng)用實(shí)例33亞馬遜的書(shū)目查詢Web服務(wù):關(guān)鍵詞查詢請(qǐng)求方法:KSOAP應(yīng)用實(shí)例34KSOAP2可以簡(jiǎn)單地通過(guò)SoapObject的getProperty方法來(lái)得到書(shū)詳細(xì)信息的節(jié)點(diǎn),存儲(chǔ)到Vector對(duì)象中:HttpTransportht =newHttpTransport("/onca/soap3");ht.call(null,envelope);SoapObjectresult=(SoapObject)envelope.getResult();VectorresultVector=(Vector)result.getProperty("Details");KSOAP應(yīng)用實(shí)例35在Vector對(duì)象中存儲(chǔ)了一組SoapObject對(duì)象,每個(gè)SoapObject對(duì)象對(duì)應(yīng)一本書(shū)的DOM對(duì)象,要得到每一本書(shū)的書(shū)名和價(jià)格:for(inti=0;i<resultVector.size();i++){

SoapObjectdetail=(SoapObject)resultVector.elementAt(i);

System.out.println("書(shū)名>>"+(String)detail.getProperty("ProductName")); System.out.println("日期>>"+(String)detail.getProperty("ReleaseDate")); System.out.println("價(jià)格>>"+(String)detail.getProperty("ListPrice"));}KSOAP應(yīng)用實(shí)例36具體程序://WSDL文檔的URLprivatestaticfinalStringNAMESPACE="/AWSECommerceService/2006-05-17";//從亞馬遜網(wǎng)站獲取的AccessKeyIDprivatestaticfinalStringAMAZON_WEBSERVICE_KEY="";publicAmazonSearchClient(){if(AMAZON_WEBSERVICE_KEY.length()==0){System.out.println("Pleasesubstituteyourownamazonwebservicekeybeforerunningthiscode.");}KSOAP應(yīng)用實(shí)例37具體程序:else{RequestrequestObject=newRequest();requestObject.author="Whyte";requestObject.searchIndex="Books";

//第1步:創(chuàng)建SoapObject對(duì)象,并制定Web服務(wù)的命名空間 SoapObjectrequest =newSoapObject(NAMESPACE,"ItemSearch");

//第2步:設(shè)置Web服務(wù)方法的參數(shù) request.addProperty("SubscriptionId", AMAZON_WEBSERVICE_KEY); request.addProperty("Request",requestObject);KSOAP應(yīng)用實(shí)例38具體程序:

//第3步:創(chuàng)建SoapSerializationEnvelope對(duì)象,并制定Web服務(wù)的版

本 SoapSerializationEnvelopeenvelope=new SoapSerializationEnvelope(SoapEnvelope.VER11);

envelope.setOutputSoapObject(request); requestObject.register(envelope); registerObjects(envelope);

//第4步:創(chuàng)建HttpTransportSE對(duì)象,并指定WSDL文檔的URL HttpTransportSEhttpTransportSE =newHttpTransportSE("/onca/ soap?Service=AWSECommerceService");httpTransportSE.setXmlVersionT

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論