解析Flex與.NET互操作中基于WebService的數(shù)據(jù)訪問(wèn)
在學(xué)習(xí)Flex的過(guò)程中,你或許會(huì)遇到Flex與.NET互操作:基于WebService的數(shù)據(jù)訪問(wèn)問(wèn)題,這里和大家分享一下Flex與.NET的WebService的數(shù)據(jù)通信知識(shí)點(diǎn)。
Flex與.NET互操作:基于WebService的數(shù)據(jù)訪問(wèn)
Flex提供了<mx:WebService>、<mx:HTTPService>和<mx:RemoteObject>標(biāo)簽來(lái)直接訪問(wèn)遠(yuǎn)程數(shù)據(jù),這用于與各種不同語(yǔ)言環(huán)境開(kāi)發(fā)提供的遠(yuǎn)程服務(wù)端數(shù)據(jù)源(如WebService)進(jìn)行數(shù)據(jù)交互通信顯得更加容易.
本文以.NET平臺(tái)下C#語(yǔ)言開(kāi)發(fā)的WebService作為遠(yuǎn)程數(shù)據(jù)源,詳細(xì)介紹Flex與.NET的WebService的數(shù)據(jù)通信知識(shí)點(diǎn);包括連接WebService,遠(yuǎn)程調(diào)用WebService方法,給WebService方法傳遞參數(shù)等相關(guān)知識(shí)點(diǎn)。三個(gè)標(biāo)簽的使用方法基本上是一樣,這里就以<mx:WebService>標(biāo)簽為例進(jìn)行介紹。
連接WebService
首先看看如下代碼塊:
- 1<mx:WebServiceidmx:WebServiceid="dataService"
- 2wsdl="http://localhost/FlashFlex/DataWebService.asmx?wsdl"
- 3useProxy="false">
- 4<mx:operationnamemx:operationname="HelloWorld"result="onSuccess(event)"fault="onFault(event)"/>
- 5<mx:operationnamemx:operationname="GetBook"fault="onFault(event)"result="onObjectSuccess(event)"/>
- 6</mx:WebService>
wsdl屬性指定到要訪問(wèn)的WebService的wsdl地址既可,其中定義了兩個(gè)操作標(biāo)簽(<mx:operation>),分別對(duì)應(yīng)于WebService中定義的WebMethod方法。
result屬性標(biāo)記訪問(wèn)WebService方法成功后的處理函數(shù);fault則相反,指定于訪問(wèn)失敗的處理函數(shù)。以上兩個(gè)<mx:operation>對(duì)應(yīng)于WebService的WebMethod方法如下:
- 1///<summary>
- 2///返回字符串
- 3///</summary>
- 4///<returns></returns>
- 5[WebMethod]
- 6publicstringHelloWorld()
- 7{
- 8return"HelloWorld";
- 9}
- 10
- 11///<summary>
- 12///返回一個(gè)簡(jiǎn)單對(duì)象
- 13///</summary>
- 14///<returns></returns>
- 15[WebMethod]
- 16publicBookGetBook()
- 17{
- 18returnnewBook
- 19{
- 20Id=1,
- 21Name="三國(guó)演義",
- 22Author="羅貫中",
- 23Price=100
- 24};
- 25}
#p#
調(diào)用WebService所定義方法
完整流程,下面我們來(lái)看看在Flex的客戶(hù)端怎么去調(diào)用WebService所定義的方法:
- 1<mx:Script>
- 2<![CDATA[
- 3importmx.controls.Alert;
- 4importmx.rpc.events.FaultEvent;
- 5importmx.rpc.events.ResultEvent;
- 6
- 7/**
- 8*向WebService發(fā)起請(qǐng)求--調(diào)用HelloWorld方法,dataService為<mx:WebService>的id
- 9**/
- 10internalfunctiononRequest():void
- 11{
- 12dataService.HelloWorld();
- 13}
- 14
- 15/**
- 16*請(qǐng)求成功處理返回結(jié)果
- 17**/
- 18internalfunctiononSuccess(evt:ResultEvent):void
- 19{
- 20Alert.show(evt.result.toString());
- 21}
- 22
- 23
- 24/**
- 25*請(qǐng)求失敗的處理函數(shù)
- 26**/
- 27internalfunctiononFault(evt:FaultEvent):void
- 28{
- 29Alert.show("訪問(wèn)WebService失敗!");
- 30}
- 31]]>
- 32</mx:Script>
#p#給WebService方法傳遞參數(shù)
通過(guò)上面的調(diào)用,就可以完成一個(gè)Flex和.NETWebService的交互。當(dāng)然我們?cè)贔lash/Flex的客戶(hù)端調(diào)用WebService也是可以傳遞參數(shù)的,如下WebService的WebMethod定義:
- 1///<summary>
- 2///將傳遞進(jìn)來(lái)的參數(shù)轉(zhuǎn)化為大寫(xiě)字符返回
- 3///</summary>
- 4///<paramnameparamname="value"></param>
- 5///<returns></returns>
- 6[WebMethod]
- 7publicstringConvertToUpper(stringvalue)
- 8{
- 9returnvalue.ToUpper();
- 10}
◆通過(guò)在<mx:WebService>標(biāo)簽下配置<mx:operation>執(zhí)行該方法就可以訪問(wèn)了,如下:
- 1<mx:operationnamemx:operationname="ConvertToUpper"result="onSuccess(event)"fault="onFault(event)"/>
- 1/**
- 2*向WebService發(fā)起請(qǐng)求
- 3**/
- 4internalfunctiononRequest():void
- 5{
- 6//dataService.HelloWorld();
- 7dataService.ConvertToUpper("abcdefg");
- 8}
另外,我們還可以通過(guò)<mx:request>來(lái)傳遞參數(shù),這里只需要知道<mx:request></mx:request>里的參數(shù)配置與WebService提供的WebMethod方法參數(shù)同名就OK。
回到前面看看WebService的方法定義,其中一個(gè)方法GetBook是返回的一個(gè)Book對(duì)象,如果是返回的對(duì)象我們?cè)贔lex的客戶(hù)端怎么來(lái)獲取這個(gè)對(duì)象的值呢?詳細(xì)見(jiàn)如下代碼示例:
- 1internalfunctiononObject():void
- 2{
- 3dataService.GetBook();
- 4}
- 5
- 6internalfunctiononObjectSuccess(evt:ResultEvent):void
- 7{
- 8//直接通過(guò)事件的result屬性得到返回值,然后直接訪問(wèn)屬性便OK
- 9Alert.show(evt.result.Name);
- 10}
- 11
- 12/**
- 13*請(qǐng)求失敗的處理函數(shù)
- 14**/
- 15internalfunctiononFault(evt:FaultEvent):void
- 16{
- 17Alert.show("訪問(wèn)WebService失敗!");
- 18}如上便完成了服務(wù)端的WebService返回對(duì)象到客戶(hù)端的調(diào)用。
【編輯推薦】
- Flex調(diào)用Webservice實(shí)現(xiàn)天氣預(yù)報(bào)
- 解析Flex渲染器的使用
- 全面認(rèn)識(shí)Flex應(yīng)用程序的六大元素
- 揭開(kāi)Flex正則表達(dá)式的神秘面紗
- Flex數(shù)據(jù)綁定及其使用頻繁的幾種情況