Flex与.NET互操作(二):基于WebService的数据访问(上)
Flex提供了<mx:WebService>、<mx:HTTPService>和<mx:RemoteObject>標簽來直接訪問遠程數據,這用于與各種不同語言環境開發提供的遠程服務端數據源(如WebService)進行數據交互通信顯得更加容易.
?????本文以.NET平臺下C#語言開發的WebService作為遠程數據源,詳細介紹Flex與.NET的WebService的數據通信知識點;包括連接WebService,遠程調用WebService方法,給WebService方法傳遞參數等相關知識點。三個標簽的使用方法基本上是一樣,這里就以<mx:WebService>標簽為例進行介紹。
?????首先看看如下代碼塊:
1?<mx:WebService?id="dataService"2?wsdl="http://localhost/FlashFlex/DataWebService.asmx?wsdl"3?useProxy="false">4?<mx:operation?name="HelloWorld"result="onSuccess(event)"fault="onFault(event)"/>5?<mx:operation?name="GetBook"fault="onFault(event)"result="onObjectSuccess(event)"/>6?</mx:WebService>?????wsdl屬性指定到要訪問的WebService的wsdl地址既可,其中定義了兩個操作標簽(<mx:operation>),分別對應于WebService中定義的WebMethod方法。result屬性標記訪問WebService方法成功后的處理函數;fault則相反,指定于訪問失敗的處理函數。以上兩個<mx:operation>對應于WebService的WebMethod方法如下:
1?///<summary>2?///返回字符串3?///</summary>4?///<returns></returns>5?[WebMethod]6?publicstringHelloWorld()7?{8?return"Hello?World";9?}10?11?///<summary>12?///返回一個簡單對象13?///</summary>14?///<returns></returns>15?[WebMethod]16?publicBook?GetBook()17?{18?returnnewBook19?{20?Id?=1,21?Name?="三國演義",22?Author?="羅貫中",23?Price?=10024?};25?}?????如上便是WebService方法定義和在Flex的客戶端(mxml)通過<mx:WebService>標簽來訪問WebService的完整流程,下面我們來看看在Flex的客戶端怎么去調用WebService所定義的方法:
1?<mx:Script>2?<![CDATA[3?import?mx.controls.Alert;4?import?mx.rpc.events.FaultEvent;5?import?mx.rpc.events.ResultEvent;6?7?/**8?*?向WebService發起請求--調用HelloWorld方法,dataService為<mx:WebService>的id9?*?*/10?internalfunction?onRequest():void11?{12?dataService.HelloWorld();13?}14?15?/**16?*?請求成功處理返回結果17?*?*/18?internalfunction?onSuccess(evt:ResultEvent):void19?{20?Alert.show(evt.result.toString());21?}22?23?24?/**25?*?請求失敗的處理函數26?*?*/27?internalfunction?onFault(evt:FaultEvent):void28?{29?Alert.show("訪問WebService失敗!");30?}31?]]>32?</mx:Script>??????通過上面的調用,就可以完成一個Flex和.NET WebService的交互。當然我們在Flash/Flex的客戶端調用WebService也是可以傳遞參數的,如下WebService的WebMethod定義:
1?///<summary>2?///將傳遞進來的參數轉化為大寫字符返回3?///</summary>4?///<param?name="value"></param>5?///<returns></returns>6?[WebMethod]7?publicstringConvertToUpper(stringvalue)8?{9?returnvalue.ToUpper();10?}?????通過在<mx:WebService>標簽下配置<mx:operation>執行該方法就可以訪問了,如下:
1?<mx:operation?name="ConvertToUpper"result="onSuccess(event)"fault="onFault(event)"/> 1?????/**2?*?向WebService發起請求3?*?*/4?internalfunction?onRequest():void5?{6?//dataService.HelloWorld();7?dataService.ConvertToUpper("abcdefg");8?}
?????另外,我們還可以通過<mx:request>來傳遞參數,這里只需要知道<mx:request></mx:request>里的參數配置與WebService提供的WebMethod方法參數同名就OK。
?????回到前面看看WebService的方法定義,其中一個方法GetBook是返回的一個Book對象,如果是返回的對象我們在Flex的客戶端怎么來獲取這個對象的值呢?詳細見如下代碼示例:
1?internalfunction?onObject():void2?{3?dataService.GetBook();4?}5?6?internalfunction?onObjectSuccess(evt:ResultEvent):void7?{8?//直接通過事件的result屬性得到返回值,然后直接訪問屬性便OK9?Alert.show(evt.result.Name);10?}11?12?/**13?*?請求失敗的處理函數14?*?*/15?internalfunction?onFault(evt:FaultEvent):void16?{17?Alert.show("訪問WebService失敗!");18?}?????如上便完成了服務端的WebService返回對象到客戶端的調用。
版權說明? 本文屬原創文章,歡迎轉載,其版權歸作者和博客園共有。??
? 作??????者:Beniao
?文章出處:?http://www.cnblogs.com/
=====================================================================================
以下是demo.mxml代碼:<?xml version="1.0" encoding="utf-8"?><mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"><mx:WebService id="dataService" wsdl="http://localhost:3035/WebService1.asmx?wsdl"useProxy="false"><mx:operation name="HelloWorld" result="onSuccess(event)"fault="onFault(event)"></mx:operation><mx:operation name="GetBook" fault="onFault(event)"?result="onObjectSuccess(event)"/></mx:WebService><mx:Script><![CDATA[import mx.rpc.Fault;import mx.controls.Alert;import mx.rpc.events.FaultEvent;import mx.rpc.events.ResultEvent;internal function onRequest():void{dataService.HelloWorld(); }internal function onSuccess(evt:ResultEvent):void{Alert.show(evt.result.toString());}internal function onFault(evt:FaultEvent):void{Alert.show("訪問WebService失敗!");}internal function onObject():void{dataService.GetBook(); }internal function onObjectSuccess(evt:ResultEvent):void{Alert.show(evt.result.Name);}]]></mx:Script><mx:Button id="btnHello" label="CALLHELLO" click="onRequest()" x="142" y="137"></mx:Button><mx:Button x="289" y="135" label="GETBOOK" fontSize="12" click="onObject()"/></mx:Application>注:前臺中webService的地址與端口要根據vs2008運行時的那個地址定,并且在運行fb3中的mxml時,vs2008的這個網站要處于運行狀態,webService才可以用
總結
以上是生活随笔為你收集整理的Flex与.NET互操作(二):基于WebService的数据访问(上)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Flex与.NET互操作系列文章
- 下一篇: 店面起名字,要注意什么问题呢?