职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 1016|回复: 0

[转帖]Flex与.NET互操作(八):使用FluorineFx网关实现远程访问

  [复制链接]
蓝色梦幻 发表于 2009-3-5 10:14 | 显示全部楼层 |阅读模式
关于远程访问在本系列文章中陆续的写了不少示例了,本文没有准备深入的去探讨,为了巩固FluorineFx网关的学习和使用。于此,本文将使用FluorineFx网关来提供数据服务等多项功能来介绍通过FluorineFx实现远程访问的相关知识点。

     FluorineFx提供的远程访问包括有很多方面的知道点,本文只介绍其中的三个知识点:访问远程对象返回对象,返回DataTable,返回DataSet对象.FluorineFx安装包里自带有相关的示例程序,要学习更多可直接参考这些示例程序.

     在实现访问前我们同样来做一些准备工作,建立好远程对象,如下:

1 namespace Fluorine.ServiceLibrary
2 {
3     public class Book
4     {
5         public int Id { get; set; }
6         public string Name { get; set; }
7         public string Author { get; set; }
8         public double Price { get; set; }
9     }
10 }


     下面是提供Flex访问的远程对象:

Code
1 namespace Fluorine.ServiceLibrary
2 {
3     [RemotingService]
4     public class FluorineService
5     {
6         /// <summary>
7         /// 返回一个简单对象
8         /// </summary>
9         /// <returns></returns>
10         public Book GetBook()
11         {
12             return new Book
13             {
14                 Id = 1,
15                 Name = \"《三国演义》\",
16                 Author = \"罗贯中\",
17                 Price = 100
18             };
19         }
20
21         /// <summary>
22         /// 返回DataTable对象
23         /// </summary>
24         /// <returns></returns>
25         [DataTableType(\"Fluorine.ServiceLibrary.Book\")]
26         public DataTable GetDataTable()
27         {
28             DataTable dt = new DataTable(\"Book\");
29             dt.Columns.Add(\"Id\", typeof(int));
30             dt.Columns.Add(\"Name\", typeof(string));
31             dt.Columns.Add(\"Author\", typeof(string));
32             dt.Columns.Add(\"rice\", typeof(double));
33
34             DataRow dr = dt.NewRow();
35             dr[\"Id\"] = 1;
36             dr[\"Name\"] = \"《三国演义》\";
37             dr[\"Author\"] = \"罗贯中\";
38             dr[\"rice\"] = 52.30;
39             dt.Rows.Add(dr);
40
41             dr = dt.NewRow();
42             dr[\"Id\"] = 2;
43             dr[\"Name\"] = \"《西游记》\";
44             dr[\"Author\"] = \"吴承恩\";
45             dr[\"rice\"] = 39.91;
46             dt.Rows.Add(dr);
47
48             return dt;
49         }
50
51         /// <summary>
52         /// 返回DataSet对象
53         /// </summary>
54         /// <returns></returns>
55         [DataSetType(\"Fluorine.ServiceLibrary.Book\")]
56         public DataSet GetDataSet()
57         {
58             DataSet ds = new DataSet(\"DS\");
59             DataTable dt = ds.Tables.Add(\"Books\");
60             dt.Columns.Add(\"Id\", typeof(int));
61             dt.Columns.Add(\"Name\", typeof(string));
62             dt.Columns.Add(\"Author\", typeof(string));
63             dt.Columns.Add(\"rice\", typeof(double));
64
65             DataRow dr = dt.NewRow();
66             dr[\"Id\"] = 1;
67             dr[\"Name\"] = \"《三国演义》\";
68             dr[\"Author\"] = \"罗贯中\";
69             dr[\"rice\"] = 52.30;
70             dt.Rows.Add(dr);
71
72             dr = dt.NewRow();
73             dr[\"Id\"] = 2;
74             dr[\"Name\"] = \"《西游记》\";
75             dr[\"Author\"] = \"吴承恩\";
76             dr[\"rice\"] = 39.91;
77             dt.Rows.Add(dr);
78
79             return ds;
80         }
81
82     }
83 }


     上面代码片段中分别提供了返回一个对象,DataTable,DataSet对象的方法。这里只需要记住两个关键标识就行,它门是:DataTableType和DataSetType.  下面通过Flex的非可视化组件<mx:RemoteObject>来访问远程对象,OK,下面我们来看看具体怎么来调用。

1 <mx:RemoteObject id=\"ro\" destination=\"fluorine\" >
2     source=\"Fluorine.ServiceLibrary.FluorineService\"
3     fault=\"onFaultHandler(event)\"
4     <mx:method name=\"GetBook\" result=\"onGetBookHandler(event)\"/>
5     <mx:method name=\"GetDataTable\" result=\"onGetDataTableHandler(event)\"/>
6     <mx:method name=\"GetDataSet\" result=\"onGetDataSetHandler(event)\"/>
7 </mx:RemoteObject>


一、返回对象示例

1 [Binable]
2 private var book:BookVO;
3     
4 private function onGetBookHandler(evt:ResultEvent):void
5 {
6     book=evt.result as BookVO;
7 }


     通过点击按扭调用远程方法GetBook()完成方法的调用,直接可以将返回结果绑定到界面元素上。

1 <mx:Button label=\"Book\" click=\"ro.GetBook()\"/>
2 <mx:TextInput width=\"302\" text=\"{boo.Name+book.Author+book.Price}\"/>


二、返回DataTable对象

     返回DataTable和DataSet,将结果绑定到DataGrid上显示,先看看DataGrid的定义:

1 <mxataGrid x=\"10\" y=\"10\" width=\"543\" height=\"147\" dataProvider=\"{books}\">
2     <mx:columns>
3             <mxataGridColumn headerText=\"编号\" dataField=\"Id\"/>
4             <mxataGridColumn headerText=\"书名\" dataField=\"Name\"/>
5             <mxataGridColumn headerText=\"作者\" dataField=\"Author\"/>
6             <mxataGridColumn headerText=\"价格\" dataField=\"rice\"/>
7     </mx:columns>
8 </mxataGrid>


     DataGrid的数据源为定义的一个ArrayCollection对象,详细如下:

1 [Binable]
2 private var books:ArrayCollection;


1 private function onGetDataTableHandler(evt:ResultEvent):void
2 {
3     books=evt.result as ArrayCollection;
4 }


三、返回DataTable对象

1 private function onGetDataSetHandler(evt:ResultEvent):void
2 {
3     books=evt.result as ArrayCollection;
4 }


     如上便完成了通过FluorineFx网关来实现远程访问,下面是完整的Flex端代码,实现很简单这里就不作详细讲解:

1 <?xml version=\"1.0\" encoding=\"utf-8\"?>
2 <mx:Application xmlns:mx=\"http://www.adobe.com/2006/mxml\" layout=\"absolute\">
3     <mx:Script>
4         <![CDATA[
5             import mx.controls.Alert;
6             import mx.rpc.events.ResultEvent;
7             import mx.rpc.events.FaultEvent;
8             import mx.collections.ArrayCollection;
9             [Binable]
10             private var books:ArrayCollection;
11             [Binable]
12             private var book:BookVO;
13            
14             private function onGetBookHandler(evt:ResultEvent):void
15             {
16                 book=evt.result as BookVO;
17             }
18            
19             private function onGetDataTableHandler(evt:ResultEvent):void
20             {
21                 books=evt.result as ArrayCollection;
22             }
23            
24             private function onGetDataSetHandler(evt:ResultEvent):void
25             {
26                 books=evt.result as ArrayCollection;
27             }
28            
29             private function onFaultHandler(evt:FaultEvent):void
30             {
31                 Alert.show(evt.fault.faultDetail);
32             }
33         ]]>
34     </mx:Script>
35     <mxanel x=\"42\" y=\"56\" width=\"578\" height=\"226\" layout=\"absolute\" fontSize=\"12\">
36     <mxataGrid x=\"10\" y=\"10\" width=\"543\" height=\"147\" dataProvider=\"{books}\">
37         <mx:columns>
38                 <mxataGridColumn headerText=\"编号\" dataField=\"Id\"/>
39                 <mxataGridColumn headerText=\"书名\" dataField=\"Name\"/>
40                 <mxataGridColumn headerText=\"作者\" dataField=\"Author\"/>
41                 <mx:DataGridColumn headerText=\"价格\" dataField=\"rice\"/>
42         </mx:columns>
43     </mx:DataGrid>
44     <mx:ControlBar>
45         <mx:Button label=\"DataTable\" click=\"getDataTable()\"/>
46         <mx:Button label=\"DataSet\" click=\"getDataSet()\"/>
47         <mx:Button label=\"Book\" click=\"ro.GetBook()\"/>
48         <mx:TextInput width=\"302\" text=\"{boo.Name+book.Author+book.Price}\"/>
49     </mx:ControlBar>
50     </mxanel>
51     <mx:RemoteObject id=\"ro\" destination=\"fluorine\" >
52         source=\"Fluorine.ServiceLibrary.FluorineService\"
53         fault=\"onFaultHandler(event)\"
54         <mx:method name=\"GetBook\" result=\"onGetBookHandler(event)\"/>
55         <mx:method name=\"GetDataTable\" result=\"onGetDataTableHandler(event)\"/>
56         <mx:method name=\"GetDataSet\" result=\"onGetDataSetHandler(event)\"/>
57     </mx:RemoteObject>
58 </mx:Application>
59
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-4-29 04:03 , Processed in 0.134877 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表