首頁 後端開發 C#.Net教程 Flex與.NET互通(三):基於WebService的資料存取(下)

Flex與.NET互通(三):基於WebService的資料存取(下)

Dec 20, 2016 pm 03:18 PM
webservice

在上一篇文章《Flex與.NET互通(二):基於WebService的資料存取(上) 》中介紹了透過標籤來存取Webservice。實際上我們也可以透過程式設計的方式動態的存取WebService,Flex SDK為我們提供了WebService類別。

使用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來存取就可以了,下面是使用標籤存取(這裡需要注意,標籤的name必須與服務端的WebService方法同名):

12wsdl="http://localhost:1146/DataWebService.asmx?wsdl"useProxy="false">
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

13internalfunctiononFault(evt:Fault) .show("呼叫WebService方法失敗,詳細:"+evt.fault.faultDetail.toString());

16

17}🎜🎜將WebService的回傳值綁定在Flex的DataGrid元件,mxml的相關程式碼如下: 🎜

1
23dataProvider="{this.myService.GetDataTable.lastResult.Tables.Books.Rows}">
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="此方法傳回泛型集合")]
2publicListBookList()
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}

相比DataSet,DataTable類型,使用List返回資料我個人認為更方面容易處理。

這就是以泛型結合(List)的形式回傳的資料形式,相比DataTable的回傳結果更為簡潔,明了。話說到此,我們在Flex下該怎麼去取得這個回傳值和處理這個值呢?其實這裡已經很清楚的展現了我們可以透過什麼方式去處理,仔細看上圖會發現"ArrayOfBook"? ? ? ?這是什麼東西?莫非是在客戶端可以透過數組的形式得到這個回傳值。為了進一步搞清楚這裡面的點點滴滴,我們需要深入到內部去了解下返回值的具體構造,透過Flex Builder的調試環境可以得到如下資訊:

看清楚了嗎? BookList方法的lastResult結構集下有兩個對象,點開節點可知正是我們透過List傳回的兩個Book對象,而lastResult的類型是:mx.collections.ArrayCollection,這不真是ActionScript中的陣列集合嗎?好的,既然這樣,在Flex客戶端便可以直接透過lastResult得到WebService傳回的泛型集合資料了。如下程式碼區塊:

1
2
3
4
5
6
7
8

9
10
11
12

13

關於WebService的資料存取就介紹到這裡,由於個人能力有限,文中有不足之處還望大家指正。如果有什麼好的建議也可以提出,大家互相討論,學習,共同進步! !


本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

c語言編譯器怎麼加下一格 c語言編譯器怎麼加下一格 Mar 03, 2025 pm 05:44 PM

c語言編譯器怎麼加下一格

C語言中NULL的替代方案有哪些 C語言中NULL的替代方案有哪些 Mar 03, 2025 pm 05:37 PM

C語言中NULL的替代方案有哪些

c語言編譯器哪個好? c語言編譯器哪個好? Mar 03, 2025 pm 05:39 PM

c語言編譯器哪個好?

C語言中NULL在現代編程中還重要嗎 C語言中NULL在現代編程中還重要嗎 Mar 03, 2025 pm 05:35 PM

C語言中NULL在現代編程中還重要嗎

c語言編譯器複製代碼方法 c語言編譯器複製代碼方法 Mar 03, 2025 pm 05:43 PM

c語言編譯器複製代碼方法

c語言編譯器網頁版有哪些? c語言編譯器網頁版有哪些? Mar 03, 2025 pm 05:42 PM

c語言編譯器網頁版有哪些?

c語言在線編程網站 c語言編譯器官方網站匯總 c語言在線編程網站 c語言編譯器官方網站匯總 Mar 03, 2025 pm 05:41 PM

c語言在線編程網站 c語言編譯器官方網站匯總

c語言編譯器安裝教程(電腦版) c語言編譯器安裝教程(電腦版) Mar 03, 2025 pm 05:41 PM

c語言編譯器安裝教程(電腦版)

See all articles