Flex提供了、和標籤來直接存取遠端數據,這用於與各種不同語言環境開發提供的遠端服務端資料來源(如WebService)進行資料互動通訊顯得更容易.
本文以.NET平台下C#語言開發的WebService作為遠端資料來源,詳細介紹Flex與.NET的WebService的資料通訊知識點;包括連接WebService,遠端呼叫WebService方法,給WebService方法傳遞參數等相關知識點。三個標籤的使用方法基本上是一樣,這裡就以標籤為例來介紹。
首先看看如下程式碼區塊:
12wsdl="http://localhost/FlashFlex/DataWebService.asmx?wsdl"
3useProxy="false">
4
5
6
wsdl屬性指定到要存取的WebService的wsdl位址既可,其中定義了兩個操作標籤(),分別對應於WebService中定義的WebMethod方法。 result屬性標記存取WebService方法成功後的處理函數;fault則相反,指定於存取失敗的處理函數。以上兩個對應於WebService的WebMethod方法如下:
1///
2///返回字串
3///
4///
5[WebMethod]
6publicstringHelloWorld()
7{
8return"HelloWorld";
9}
10
11///
12///回傳一個簡單物件
11///
12///回傳一個簡單物件
13//12///// 14///
15[WebMethod]
16publicBookGetBook()
17{
18returnnewBook
19{
20Id=1,
21Name="三國演義=100
24};
25}
如上便是WebService方法定義和在Flex的客戶端(mxml)透過
標籤來存取WebService的完整流程,下面我們來看看在Flex的客戶端怎麼去呼叫WebService所定義的方法:
1<script><p>23importmx.controls.Alert;<br>4importmx.rpc.events.FaultEvent;<br>5importmx.rpc.events.Result;<br> **<br>8*向WebService發起請求--呼叫HelloWorld方法,dataService為<webservice>的id<br>9**/<br>10internalfunctiononRequest():void<br>11{<br>12dataService.HelloWorld();<br>13}<br>14<br>15/**<br>16*請求成功處理回傳結果<br>17**/<br>18internalfunctiononSuccultx <br>20Alert.show(evt.result.toString());<br>21}<br>22<br>23<br>24/**<br>25*請求失敗的處理函數<br>26**/<br>27internalfunctiononFault(evt:FaultEvent):void<br>27internalfunctiononFault(evt:FaultEvent):void<br>27internalfunctiononFault(evt:FaultEvent):void<br>27internalfunctiononFault(evt:FaultEvent):void<br>28{Tk(o. WebService失敗!");<br>30}<br>31]]><br>32</webservice></p></script>
透過上面的調用,就可以完成一個Flex和.NET WebService的交互。當然我們在Flash/Flex的客戶端呼叫WebService也是可以傳遞參數的,如下WebService的WebMethod定義:
1///2///將傳遞進來的參數轉換為大寫字元回傳
3/// summary>
4///
5///
6[WebMethod]
7publicstringConvertToUpper(stringvalue)
8{
9returnvalue.ToperUp);
10}
透過在標籤下設定執行該方法就可以存取了,如下:
1
1 /**
2*向WebService發起請求
3**/
4internalfunctiononRequest():void
5{
6//dataService.HelloWorld();
7dataService.ConvertToUpper("abcdefg");
8}
另外,我們還可以透過來傳遞參數,這裡只需要知道裡的參數配置與WebService提供的WebMethod方法參數同名就OK。
回到前面看看WebService的方法定義,其中一個方法GetBook是返回的一個Book對象,如果是返回的對像我們在Flex的客戶端怎麼來取得這個對象的值呢?詳細請參考以下程式碼範例:
1internalfunctiononObject():void
2{
3dataService.GetBook();
4}
5
6internalfunctiononObjectSuccess(evt:ResultEvent):void
7{
8/ult/ult然後直接存取屬性便OK
9Alert.show(evt.result.Name);
10}
11
12/**
13*請求失敗的處理函數
14**/
15internalfunctiononFault(evt:FaultEvent):void
16{
16{
17Alert.show( "存取WebService失敗!");
18}
🎜