基于WebService的數(shù)據(jù)訪問(wèn)(上) Flex與.NET互操作(二)
更新時(shí)間:2009年06月15日 19:49:23 作者:
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)行介紹。
首先看看如下代碼塊:
<mx:WebService id="dataService"
wsdl="http://localhost/FlashFlex/DataWebService.asmx?wsdl"
useProxy="false">
<mx:operation name="HelloWorld" result="onSuccess(event)" fault="onFault(event)"/>
<mx:operation name="GetBook" fault="onFault(event)" result="onObjectSuccess(event)"/>
</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方法如下:
/// <summary>
/// 返回字符串
/// </summary>
/// <returns></returns>
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
/// <summary>
/// 返回一個(gè)簡(jiǎn)單對(duì)象
/// </summary>
/// <returns></returns>
[WebMethod]
public Book GetBook()
{
return new Book
{
Id = 1,
Name = "三國(guó)演義",
Author = "羅貫中",
Price = 100
};
}
如上便是WebService方法定義和在Flex的客戶端(mxml)通過(guò)<mx:WebService>標(biāo)簽來(lái)訪問(wèn)WebService的完整流程,下面我們來(lái)看看在Flex的客戶端怎么去調(diào)用WebService所定義的方法:
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
/**
* 向WebService發(fā)起請(qǐng)求--調(diào)用HelloWorld方法,dataService為<mx:WebService>的id
* */
internal function onRequest():void
{
dataService.HelloWorld();
}
/**
* 請(qǐng)求成功處理返回結(jié)果
* */
internal function onSuccess(evt:ResultEvent):void
{
Alert.show(evt.result.toString());
}
/**
* 請(qǐng)求失敗的處理函數(shù)
* */
internal function onFault(evt:FaultEvent):void
{
Alert.show("訪問(wèn)WebService失敗!");
}
]]>
</mx:Script>
通過(guò)上面的調(diào)用,就可以完成一個(gè)Flex和.NET WebService的交互。當(dāng)然我們?cè)贔lash/Flex的客戶端調(diào)用WebService也是可以傳遞參數(shù)的,如下WebService的WebMethod定義:
/// <summary>
/// 將傳遞進(jìn)來(lái)的參數(shù)轉(zhuǎn)化為大寫(xiě)字符返回
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
[WebMethod]
public string ConvertToUpper(string value)
{
return value.ToUpper();
}
通過(guò)在<mx:WebService>標(biāo)簽下配置<mx:operation>執(zhí)行該方法就可以訪問(wèn)了,如下:
<mx:operation name="ConvertToUpper" result="onSuccess(event)" fault="onFault(event)"/>
/**
* 向WebService發(fā)起請(qǐng)求
* */
internal function onRequest():void
{
//dataService.HelloWorld();
dataService.ConvertToUpper("abcdefg");
}
另外,我們還可以通過(guò)<mx:request>來(lái)傳遞參數(shù),這里只需要知道<mx:request></mx:request>里的參數(shù)配置與WebService提供的WebMethod方法參數(shù)同名就OK。
回到前面看看WebService的方法定義,其中一個(gè)方法GetBook是返回的一個(gè)Book對(duì)象,如果是返回的對(duì)象我們?cè)贔lex的客戶端怎么來(lái)獲取這個(gè)對(duì)象的值呢?詳細(xì)見(jiàn)如下代碼示例:
internal function onObject():void
{
dataService.GetBook();
}
internal function onObjectSuccess(evt:ResultEvent):void
{
//直接通過(guò)事件的result屬性得到返回值,然后直接訪問(wèn)屬性便OK
Alert.show(evt.result.Name);
}
/**
* 請(qǐng)求失敗的處理函數(shù)
* */
internal function onFault(evt:FaultEvent):void
{
Alert.show("訪問(wèn)WebService失敗!");
}
如上便完成了服務(wù)端的WebService返回對(duì)象到客戶端的調(diào)用。
首先看看如下代碼塊:
復(fù)制代碼 代碼如下:
<mx:WebService id="dataService"
wsdl="http://localhost/FlashFlex/DataWebService.asmx?wsdl"
useProxy="false">
<mx:operation name="HelloWorld" result="onSuccess(event)" fault="onFault(event)"/>
<mx:operation name="GetBook" fault="onFault(event)" result="onObjectSuccess(event)"/>
</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方法如下:
/// <summary>
/// 返回字符串
/// </summary>
/// <returns></returns>
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
/// <summary>
/// 返回一個(gè)簡(jiǎn)單對(duì)象
/// </summary>
/// <returns></returns>
[WebMethod]
public Book GetBook()
{
return new Book
{
Id = 1,
Name = "三國(guó)演義",
Author = "羅貫中",
Price = 100
};
}
如上便是WebService方法定義和在Flex的客戶端(mxml)通過(guò)<mx:WebService>標(biāo)簽來(lái)訪問(wèn)WebService的完整流程,下面我們來(lái)看看在Flex的客戶端怎么去調(diào)用WebService所定義的方法:
復(fù)制代碼 代碼如下:
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
/**
* 向WebService發(fā)起請(qǐng)求--調(diào)用HelloWorld方法,dataService為<mx:WebService>的id
* */
internal function onRequest():void
{
dataService.HelloWorld();
}
/**
* 請(qǐng)求成功處理返回結(jié)果
* */
internal function onSuccess(evt:ResultEvent):void
{
Alert.show(evt.result.toString());
}
/**
* 請(qǐng)求失敗的處理函數(shù)
* */
internal function onFault(evt:FaultEvent):void
{
Alert.show("訪問(wèn)WebService失敗!");
}
]]>
</mx:Script>
通過(guò)上面的調(diào)用,就可以完成一個(gè)Flex和.NET WebService的交互。當(dāng)然我們?cè)贔lash/Flex的客戶端調(diào)用WebService也是可以傳遞參數(shù)的,如下WebService的WebMethod定義:
復(fù)制代碼 代碼如下:
/// <summary>
/// 將傳遞進(jìn)來(lái)的參數(shù)轉(zhuǎn)化為大寫(xiě)字符返回
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
[WebMethod]
public string ConvertToUpper(string value)
{
return value.ToUpper();
}
通過(guò)在<mx:WebService>標(biāo)簽下配置<mx:operation>執(zhí)行該方法就可以訪問(wèn)了,如下:
<mx:operation name="ConvertToUpper" result="onSuccess(event)" fault="onFault(event)"/>
/**
* 向WebService發(fā)起請(qǐng)求
* */
internal function onRequest():void
{
//dataService.HelloWorld();
dataService.ConvertToUpper("abcdefg");
}
另外,我們還可以通過(guò)<mx:request>來(lái)傳遞參數(shù),這里只需要知道<mx:request></mx:request>里的參數(shù)配置與WebService提供的WebMethod方法參數(shù)同名就OK。
回到前面看看WebService的方法定義,其中一個(gè)方法GetBook是返回的一個(gè)Book對(duì)象,如果是返回的對(duì)象我們?cè)贔lex的客戶端怎么來(lái)獲取這個(gè)對(duì)象的值呢?詳細(xì)見(jiàn)如下代碼示例:
復(fù)制代碼 代碼如下:
internal function onObject():void
{
dataService.GetBook();
}
internal function onObjectSuccess(evt:ResultEvent):void
{
//直接通過(guò)事件的result屬性得到返回值,然后直接訪問(wèn)屬性便OK
Alert.show(evt.result.Name);
}
/**
* 請(qǐng)求失敗的處理函數(shù)
* */
internal function onFault(evt:FaultEvent):void
{
Alert.show("訪問(wèn)WebService失敗!");
}
如上便完成了服務(wù)端的WebService返回對(duì)象到客戶端的調(diào)用。
相關(guān)文章
Flex 如何得到itemRenderer里面的內(nèi)容
itemRenderer里面的內(nèi)容 獲取技巧。2009-07-07Flex與.NET互操作(十三):FluorineFx.Net實(shí)現(xiàn)視頻錄制與視頻回放
本文主要介紹使用FluorineFx.Net來(lái)實(shí)現(xiàn)視頻錄制與視頻回放,F(xiàn)luorineFx如同F(xiàn)MS一樣,除了有AMF通信,RTMP協(xié)議,RPC 和遠(yuǎn)程共享對(duì)象外,它同樣具備視頻流服務(wù)的功能。2009-06-06基于WebService的數(shù)據(jù)訪問(wèn)(下) Flex與.NET互操作(三)
在上一篇文章《Flex與.NET互操作(二):基于WebService的數(shù)據(jù)訪問(wèn)(上) 》中介紹了通過(guò)<mx:WebService>標(biāo)簽來(lái)訪問(wèn)Webservice。實(shí)際上我們也可以通過(guò)編程的方式動(dòng)態(tài)的訪問(wèn)WebService,F(xiàn)lex SDK為我們提供了WebService類。2009-06-06Flex include和import ActionScript代碼
為了讓你的MXML代碼可讀性增強(qiáng),你可以在<mx:Script>標(biāo)簽內(nèi)引用ActionScript代碼文件,而不是把大塊的代碼都插入到<mx:Script>里。引用ActionScript有include和import兩種方式。2009-08-08使用asx3m與xstream配合解決flex與java利用httpservice傳遞xml數(shù)據(jù)問(wèn)題
過(guò)年期間抽空在弄flex前端對(duì)象與后端java對(duì)象利用httpservice交互的問(wèn)題。比如前端需要user list數(shù)據(jù),構(gòu)造了flex user object類。2009-02-02