在上一篇文章《Flex與.NET互通(二):基於WebService的資料存取(上) 》中介紹了透過
使用WebService類別來存取WebService其實也就是將
1 internalfunctiononClick():void
2{
3varservice:WebService=newWebService();
4service.loadWSDL("http://localhost:1146/FlashFlexService.asmx?wsdl" );
5service.addEventListener(ResultEvent.RESULT,onResult);
6service.addEventListener(FaultEvent.FAULT,onFault);
7service.GetBook();
8}
Service直接透過WebSService(WebDLSService) ,動態為類別物件指定相關的處理函數,然後和標籤一樣呼叫遠端WebService方法既可。
1 internalfunctiononResult (evt:ResultEvent):void
2{
3Alert.show(evt.result.Id);
4}
5
6internalfunctiononFault(evt:FaultEvent):void
7{
8885. toString());
9}
如上便完成了使用WebService類別透過程式設計的方式存取遠端WebService方法的呼叫。
下面來看看WebService回傳DataTable等負責類型,在Flex客戶端該怎麼解析。先定義WebService方法如下:
1[WebMethod(Description="此方法將傳回DataTable類型的資料")]
2publicDataTableGetDataTable()
3{
4DataTabledt=newDataTable("Books");
5dt.Columns.Add("Id", typeof(int));
6dt.Columns.Add("Name",typeof(string));
7dt.Columns.Add("Author",typeof(string));
8dt.Columns.Add("Price" ,typeof(double));
9
10DataRowdr=dt.NewRow();
11dr["Id"]=1;
12dr["Name"]="《Flex遊戲開發》";
13dr["Author" ]="張三";
14dr["Price"]=54.85;
15dt.Rows.Add(dr);
16
17dr=dt.NewRow();
18dr["Id"]=2;
19drdr ["Name"]="《Flash遊戲開發》";
20dr["Author"]="李四";
21dr["Price"]=65.50;
22dt.Rows.Add(dr);
23
24returndt;
25}
同樣在Flex客戶端透過WebService來存取就可以了,下面是使用
1
3
4operation>
5
提供好了WebService,客戶端也連接上了WebService,現在只差呼叫WebService提供的遠端方法了。如下:
1 internalfunctiononTable():void
2{
3myService.addEventListener(ResultEvent.RESULT,onSuccess);
4myService.addEventListener(FaultEvent.FAULT,onFault);
5myService.addEventListener(FaultEvent.FAULT,onFault);
5myService.addEventListener(FaultEvent.FAULT,onFault);
5myService.addEventListener(FaultEvent.FAULT,onFault);
5myService.addEventListener(FaultEvent.FAULT,onFault);
5myService.addEventListener(FaultEvent.FAULT,onFault);
5myService.addEventListener(FaultEvent.FAULT,onFault);
5myService。 evt:ResultEvent):void
9{
10//bookGrid.dataProvider=this.myService.GetDataTable.lastResult.Tables.Books.Rows;
11}
12
13internalfunctiononFault(evt:Fault}
12
16
17}🎜🎜將WebService的回傳值綁定在Flex的DataGrid元件,mxml的相關程式碼如下: 🎜1
2
4
5
6
7
8
9
10
11
12
13 mx:ControlBar>
14
透過DataGrid的dataProvider屬性綁定DataGrid元件的資料來源,除了直接透過"{}"綁定表達式來設定外我們也可以在呼叫遠端方法成功的處理函數裡為DataGrid指定資料來源,請參閱上面程式碼中註解的程式碼部分。 {this.myService.GetDataTable.lastResult.Tables.Books.Rows}表示將遠端WebService方法GetDataTable()的傳回結果(DataTable)的所有行作為資料來源與DataGrid元件進綁定,其中Books為資料來源DataTable的name ,
DataSet,DataTable相比泛型集合來說,性能上有很大的差距,複雜的序列化和反序列化過程也很負責,自從.net 2.0推出泛型到現在,我一直就比較喜歡用泛型來傳遞大數據。 OK,以下我將介紹下在Flex中怎麼去處理WebService方法回傳的泛型集合資料。我們有以下WebService方法定義:
1 [WebMethod(Description="此方法傳回泛型集合")]
2publicList
3{
4returnnewList
5{
6newBook
7{
8Id=1,
9Name="《Flex遊戲開發》",
10Author="張三",
11Price=54.85
12},
13newBook
14{
15Id=1,
16Name="《Flash16Name="《Flash17》 ="李四",
18Price=65.50
19}
20};
21}
關於WebService的資料存取就介紹到這裡,由於個人能力有限,文中有不足之處還望大家指正。如果有什麼好的建議也可以提出,大家互相討論,學習,共同進步! !