Flex與.NET互操作:基于WebService的數(shù)據(jù)訪問_.Net教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:淺談在.NET應(yīng)用程序中進(jìn)行Erlang風(fēng)格的并行編程
      Erlang能夠用來編寫高度可伸縮的并行應(yīng)用程序,其中經(jīng)常會(huì)出現(xiàn)數(shù)以百萬計(jì)的輕量級(jí)組件,這種類似于線程的組件被稱之為actor。不幸的是,這往往需要您使用Erlang這種相對(duì)神秘的編程語言重寫所有代碼。不過我們也有其他選擇,例如使用名不見經(jīng)傳的CCR平臺(tái)來進(jìn)

      Flex提供了<mx:WebService>、<mx:HTTPService>和<mx:RemoteObject>標(biāo)簽來直接訪問遠(yuǎn)程數(shù)據(jù),這用于與各種不同語言環(huán)境開發(fā)提供的遠(yuǎn)程服務(wù)端數(shù)據(jù)源(如WebService)進(jìn)行數(shù)據(jù)交互通信顯得更加容易.

      本文以.NET平臺(tái)下C#語言開發(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)行介紹。

      首先看看如下代碼塊:

      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地址既可,其中定義了兩個(gè)操作標(biāo)簽(<mx:operation>),分別對(duì)應(yīng)于WebService中定義的WebMethod方法。result屬性標(biāo)記訪問WebService方法成功后的處理函數(shù);fault則相反,指定于訪問失敗的處理函數(shù)。以上兩個(gè)<mx:operation>對(duì)應(yīng)于WebService的WebMethod方法如下:

      1 /// <summary>
      2 /// 返回字符串
      3 /// </summary>
      4 /// <returns></returns>
      5 [WebMethod]
      6 public string HelloWorld()
      7 {
      8 return "Hello World";
      9 }
      10
      11 /// <summary>
      12 /// 返回一個(gè)簡單對(duì)象
      13 /// </summary>
      14 /// <returns></returns>
      15 [WebMethod]
      16 public Book GetBook()
      17 {
      18 return new Book
      19 {
      20 Id = 1,
      21 Name = "三國演義",
      22 Author = "羅貫中",
      23 Price = 100
      24 };
      25 }

      如上便是WebService方法定義和在Flex的客戶端(mxml)通過<mx:WebService>標(biāo)簽來訪問WebService的完整流程,下面我們來看看在Flex的客戶端怎么去調(diào)用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發(fā)起請(qǐng)求--調(diào)用HelloWorld方法,dataService為<mx:WebService>的id
      9 * */
      10 internal function onRequest():void
      11 {
      12 dataService.HelloWorld();
      13 }
      14
      15 /**
      16 * 請(qǐng)求成功處理返回結(jié)果
      17 * */
      18 internal function onSuccess(evt:ResultEvent):void
      19 {
      20 Alert.show(evt.result.toString());
      21 }
      22
      23
      24 /**
      25 * 請(qǐng)求失敗的處理函數(shù)
      26 * */
      27 internal function onFault(evt:FaultEvent):void
      28 {
      29 Alert.show("訪問WebService失敗!");
      30 }
      31 ]]>
      32 </mx:Script>

      通過上面的調(diào)用,就可以完成一個(gè)Flex和.NET WebService的交互。當(dāng)然我們?cè)贔lash/Flex的客戶端調(diào)用WebService也是可以傳遞參數(shù)的,如下WebService的WebMethod定義:

      1 /// <summary>
      2 /// 將傳遞進(jìn)來的參數(shù)轉(zhuǎn)化為大寫字符返回
      3 /// </summary>
      4 /// <param name="value"></param>
      5 /// <returns></returns>
      6 [WebMethod]
      7 public string ConvertToUpper(string value)
      8 {
      9 return value.ToUpper();
      10 }

      通過在<mx:WebService>標(biāo)簽下配置<mx:operation>執(zhí)行該方法就可以訪問了,如下:

      1 <mx:operation name="ConvertToUpper" result="onSuccess(event)" fault="onFault(event)"/>

      1 /**
      2 * 向WebService發(fā)起請(qǐng)求
      3 * */
      4 internal function onRequest():void
      5 {
      6 //dataService.HelloWorld();
      7 dataService.ConvertToUpper("abcdefg");
      8 }

      另外,我們還可以通過<mx:request>來傳遞參數(shù),這里只需要知道<mx:request></mx:request>里的參數(shù)配置與WebService提供的WebMethod方法參數(shù)同名就OK。

      回到前面看看WebService的方法定義,其中一個(gè)方法GetBook是返回的一個(gè)Book對(duì)象,如果是返回的對(duì)象我們?cè)贔lex的客戶端怎么來獲取這個(gè)對(duì)象的值呢?詳細(xì)見如下代碼示例:

      1 internal function onObject():void
      2 {
      3 dataService.GetBook();
      4 }
      5
      6 internal function onObjectSuccess(evt:ResultEvent):void
      7 {
      8 //直接通過事件的result屬性得到返回值,然后直接訪問屬性便OK
      9 Alert.show(evt.result.Name);
      10 }
      11
      12 /**
      13 * 請(qǐng)求失敗的處理函數(shù)
      14 * */
      15 internal function onFault(evt:FaultEvent):void
      16 {
      17 Alert.show("訪問WebService失敗!");
      18 }

      如上便完成了服務(wù)端的WebService返回對(duì)象到客戶端的調(diào)用。

      分享:ADO.NET實(shí)用經(jīng)驗(yàn)無保留曝光
      ADO.NET作為微軟最新的數(shù)據(jù)訪問技術(shù),已經(jīng)在企業(yè)開發(fā)中得到了廣泛的應(yīng)用。對(duì)于一線的開發(fā)人員來說,掌握基本的概念和技術(shù)之后,提高應(yīng)用水平和解決實(shí)際問題的最有效手段,莫過于相互交流彼此的最佳時(shí)間經(jīng)驗(yàn)經(jīng)驗(yàn)。在這篇文章中,兩位ADO.NET專家向讀者毫無保

      來源:模板無憂//所屬分類:.Net教程/更新時(shí)間:2009-03-13
      相關(guān).Net教程