日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

[转]Flex与.NET互操作(三):基于WebService的数据访问(下)

發布時間:2025/3/15 asp.net 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [转]Flex与.NET互操作(三):基于WebService的数据访问(下) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉自:http://blog.csdn.net/beniao277/archive/2009/01/19/3837605.aspx

在上一篇文章《Flex與.NET互操作(二):基于WebService的數據訪問(上) 》中介紹了通過<mx:WebService>標簽來訪問Webservice。實際上我們也可以通過編程的方式動態的訪問WebService,Flex SDK為我們提供了WebService類。

???? 使用WebService類來訪問WebService其實也就是將<mx:WebService>標簽的屬性通過類對象的屬性形式來表示,相比之下使用WebService類比使用<mx:WebService>標簽要靈活。下面我們來看看編程方式怎么連接和調用遠程方法:

1???? internal function onClick():void
2???? {
3???????? var service:WebService = new WebService();
4???????? service.loadWSDL("http://localhost:1146/FlashFlexService.asmx?wsdl");
5???????? service.addEventListener(ResultEvent.RESULT,onResult);
6???????? service.addEventListener(FaultEvent.FAULT,onFault);
7???????? service.GetBook();
8???? }
???? 直接通過類對象的loadWSDL()方法調用遠程WebService,動態為類對象指定相關的處理函數,然后和標簽一樣調用遠程WebService方法既可。

1???? internal function onResult(evt:ResultEvent):void
2???? {
3???????? Alert.show(evt.result.Id);
4???? }
5????
6???? internal function onFault(evt:FaultEvent):void
7???? {
8???????? Alert.show(evt.fault.faultDetail.toString());
9???? }
???? 如上便完成了使用WebService類通過編程的方式訪問遠程WebService方法的調用。

???? 下面來看看WebService返回DataTable等負責類型,在Flex客戶端該怎么解析。首先定義WebService方法如下:

1 [WebMethod(Description="該方法將返回DataTable類型的數據")]
2 public DataTable GetDataTable()
3 {
4???? DataTable dt = new DataTable("Books");
5???? dt.Columns.Add("Id", typeof(int));
6???? dt.Columns.Add("Name", typeof(string));
7???? dt.Columns.Add("Author", typeof(string));
8???? dt.Columns.Add("Price", typeof(double));
9
10???? DataRow dr = dt.NewRow();
11???? dr["Id"] = 1;
12???? dr["Name"] = "《Flex游戲開發》";
13???? dr["Author"] = "張三";
14???? dr["Price"] = 54.85;
15???? dt.Rows.Add(dr);
16
17???? dr = dt.NewRow();
18???? dr["Id"] = 2;
19???? dr["Name"] = "《Flash游戲開發》";
20???? dr["Author"] = "李四";
21???? dr["Price"] = 65.50;
22???? dt.Rows.Add(dr);
23
24???? return dt;
25 }
???? 同樣在Flex客戶端通過WebService來訪問就可以了,下面是使用<mx:WebServive>標簽訪問(這里需要注意,<mx:operation>標簽的name必須與服務端的WebService方法同名):

1???? <mx:WebService id="myService"
2???????? wsdl="http://localhost:1146/DataWebService.asmx?wsdl" useProxy="false">
3???????? <mx:operation name="GetDataTable">
4???????? </mx:operation>
5???? </mx:WebService>
???? 提供好了WebService,客戶端也連接上了WebService,現在只差調用WebService提供的遠程方法了。如下:

1???? internal function onTable():void
2???? {
3???????? myService.addEventListener(ResultEvent.RESULT,onSuccess);
4???????? myService.addEventListener(FaultEvent.FAULT,onFault);
5???????? myService.GetDataTable.send();
6???? }
7????
8???? internal function onSuccess(evt:ResultEvent):void
9???? {
10???????? //bookGrid.dataProvider=this.myService.GetDataTable.lastResult.Tables.Books.Rows;
11???? }
12????
13???? internal function onFault(evt:FaultEvent):void
14???? {
15???????? Alert.show("調用WebService方法失敗,詳細:" + evt.fault.faultDetail.toString());
16????????
17???? }
???? 將WebService的返回值綁定在Flex的DataGrid組件,mxml的相關代碼如下:

1 <mx:Panel x="41" y="123" width="480" height="279" layout="absolute" fontSize="12">
2???? <mx:DataGrid x="10" y="10" width="436" id="bookGrid"
3???????? dataProvider="{this.myService.GetDataTable.lastResult.Tables.Books.Rows}">
4???????? <mx:columns>
5???????????? <mx:DataGridColumn headerText="編號" dataField="Id"/>
6???????????? <mx:DataGridColumn headerText="書名" dataField="Name"/>
7???????????? <mx:DataGridColumn headerText="作者" dataField="Author"/>
8???????????? <mx:DataGridColumn headerText="價格" dataField="Price"/>
9???????? </mx:columns>
10???? </mx:DataGrid>
11???? <mx:ControlBar>
12???????? <mx:Button label="DataTable" click="onTable()"/>
13???? </mx:ControlBar>
14 </mx:Panel>
???? 通過DataGrid的dataProvider屬性綁定DataGrid組件的數據源,除了直接通過"{}"綁定表達式幫定外我們也可以在調用遠程方法成功的處理函數里給DataGrid指定數據源,見上面代碼中注釋的代碼部分。{this.myService.GetDataTable.lastResult.Tables.Books.Rows}表示將遠程WebService方法GetDataTable()的返回結果(DataTable)的所有行作為數據源與DataGrid組件進綁定,其中Books為數據源DataTable的name,詳細見前面WebService方法的定義出。程序運行結果如下圖:

??? DataSet,DataTable相比泛型集合來說,性能上有很大的差距,復雜的序列化和反序列化過程也很負責,自從.net 2.0推出泛型到現在,我一直就比較喜歡用泛型來傳遞大數據。OK,下面我將介紹下在Flex中怎么去處理WebService方法返回的泛型集合數據。我們有如下WebService方法定義:

1???? [WebMethod(Description="該方法返回泛型集合")]
2???? public List<Book> BookList()
3???? {
4???????? return new List<Book>
5???????? {
6???????????? new Book
7???????????? {
8???????????????? Id = 1,
9???????????????? Name = "《Flex游戲開發》",
10???????????????? Author = "張三",
11???????????????? Price = 54.85
12???????????? },
13???????????? new Book
14???????????? {
15???????????????? Id = 1,
16???????????????? Name = "《Flash游戲開發》",
17???????????????? Author = "李四",
18???????????????? Price = 65.50
19???????????? }
20???????? };
21???? }
???? 相比DataSet,DataTable類型,使用List<>返回數據我個人認為更方面容易處理。我們直接在WebService的調試環境下測試返回List<>的WebService方法可以看到如下結果:

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

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

1 internal function onTable():void
2 {
3???? myService.addEventListener(ResultEvent.RESULT,onSuccess);
4???? myService.addEventListener(FaultEvent.FAULT,onFault);
5???? myService.BookList.send();
6 }
7
8 internal function onSuccess(evt:ResultEvent):void
9 {
10???? var arrC:ArrayCollection = this.myService.BookList.lastResult as ArrayCollection;
11???? bookGrid.dataProvider=arrC;
12 }
13
14 internal function onFault(evt:FaultEvent):void
15 {
16???? Alert.show("調用WebService方法失敗,詳細:" + evt.fault.faultDetail.toString());
17????
18 }
???? 對應的mxml代碼如下(運行結果和上面返回DataTable類型一樣):

1 <mx:Panel x="41" y="123" width="480" height="279" layout="absolute" fontSize="12">
2???? <mx:DataGrid x="10" y="10" width="436" id="bookGrid">
3???????? <mx:columns>
4???????????? <mx:DataGridColumn headerText="編號" dataField="Id"/>
5???????????? <mx:DataGridColumn headerText="書名" dataField="Name"/>
6???????????? <mx:DataGridColumn headerText="作者" dataField="Author"/>
7???????????? <mx:DataGridColumn headerText="價格" dataField="Price"/>
8???????? </mx:columns>
9???? </mx:DataGrid>
10???? <mx:ControlBar>
11???????? <mx:Button label="DataTable" click="onTable()"/>
12???? </mx:ControlBar>
13 </mx:Panel>
???? 關于WebService的數據訪問就介紹到這里,由于個人能力有限,文中有不足之處還望大家指正。如果有什么好的建議也可以提出,大家相互討論,學習,共同進步!!

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/beniao277/archive/2009/01/19/3837605.aspx

轉載于:https://www.cnblogs.com/toad/archive/2009/09/20/1570401.html

總結

以上是生活随笔為你收集整理的[转]Flex与.NET互操作(三):基于WebService的数据访问(下)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。