亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

基于WebService的數(shù)據(jù)訪問(下) Flex與.NET互操作(三)

 更新時間:2009年06月15日 20:05:26   作者:  
在上一篇文章《Flex與.NET互操作(二):基于WebService的數(shù)據(jù)訪問(上) 》中介紹了通過<mx:WebService>標簽來訪問Webservice。實際上我們也可以通過編程的方式動態(tài)的訪問WebService,F(xiàn)lex SDK為我們提供了WebService類。

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

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()方法調(diào)用遠程WebService,動態(tài)為類對象指定相關的處理函數(shù),然后和標簽一樣調(diào)用遠程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方法的調(diào)用。

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

 1 [WebMethod(Description="該方法將返回DataTable類型的數(shù)據(jù)")]
 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游戲開發(fā)》";
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游戲開發(fā)》";
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,現(xiàn)在只差調(diào)用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("調(diào)用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組件的數(shù)據(jù)源,除了直接通過"{}"綁定表達式幫定外我們也可以在調(diào)用遠程方法成功的處理函數(shù)里給DataGrid指定數(shù)據(jù)源,見上面代碼中注釋的代碼部分。{this.myService.GetDataTable.lastResult.Tables.Books.Rows}表示將遠程 WebService方法GetDataTable()的返回結果(DataTable)的所有行作為數(shù)據(jù)源與DataGrid組件進綁定,其中 Books為數(shù)據(jù)源DataTable的name,詳細見前面WebService方法的定義出。程序運行結果如下圖:

         

     

     DataSet,DataTable相比泛型集合來說,性能上有很大的差距,復雜的序列化和反序列化過程也很負責,自從.net 2.0推出泛型到現(xiàn)在,我一直就比較喜歡用泛型來傳遞大數(shù)據(jù)。OK,下面我將介紹下在Flex中怎么去處理WebService方法返回的泛型集合數(shù)據(jù)。我們有如下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游戲開發(fā)》",
10                 Author = "張三",
11                 Price = 54.85
12             },
13             new Book
14             {
15                 Id = 1,
16                 Name = "《Flash游戲開發(fā)》",
17                 Author = "李四",
18                 Price = 65.50
19             }
20         };
21     }

     相比DataSet,DataTable類型,使用List<>返回數(shù)據(jù)我個人認為更方面容易處理。我們直接在WebService的調(diào)試環(huán)境下測試返回List<>的WebService方法可以看到如下結果:

        

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

          

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

 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("調(diào)用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的數(shù)據(jù)訪問就介紹到這里,由于個人能力有限,文中有不足之處還望大家指正。如果有什么好的建議也可以提出,大家相互討論,學習,共同進步??!

相關文章

最新評論