利用fluorineFx将DataTable从.Net传递到Flash

FluorineFx自带的示例都不错,就是有点不简洁,下面的代码基本上已经最简版了(环境vs2010)
1、先创建一个Web Application,然后添加FluorineFx以及FluorineFx.ServiceBrowser的引用

这二个程序集的默认位置在:

C:"Program Files (x86)"FluorineFx"Bin"net"3.5"FluorineFx.dll
C:"Program Files (x86)"FluorineFx"Bin"net"3.5"FluorineFx.ServiceBrowser.dll

2、然后添加一个DataService.cs类,写好.net的服务端代码

01 using System.Data;
02 using FluorineFx;
03  
04 namespace DataTableDemo
05 {
06     [RemotingService]
07     public class DataService
08     {
09  
10         [DataTableType("随便填写什么")]
11         public object GetCountries(string capital)
12         {
13             DataTable tbl = new DataTable();
14             tbl.Columns.Add("ID"typeof(System.Int32));
15             tbl.Columns.Add("Country"typeof(System.String));
16             tbl.Columns.Add("Capital"typeof(System.String));
17  
18             tbl.Rows.Add(1, "Andorra""Andorra");
19             tbl.Rows.Add(2, "United Arab""Abu Dhabi");
20             tbl.Rows.Add(3, "BeiJing""China");
21  
22             if (capital.Length > 0)
23             {
24                 DataTable tbl2 = tbl.Clone();               
25                 DataRow[] drs =  tbl.Select("Capital like '%" + capital + "%'");
26                 foreach (var item in drs)
27                 {
28                     tbl2.Rows.Add(item[0], item[1], item[2]);
29                 }
30                 return tbl2;
31             }
32  
33             return tbl;
34  
35         }
36     }
37 }

这段代码很简单,就是返回一个DataTable而已

3、添加一些配置文件

  3.1、修改web.config

01 <?xml version="1.0" encoding="utf-8"?>
02 <configuration>
03     <configSections>
04     <!--添加fluorinefx配置节信息-->
05     <sectionGroup name="fluorinefx">
06             <section name="settings"type="FluorineFx.Configuration.XmlConfigurator, FluorineFx"requirePermission="false"/>
07         </sectionGroup>
08     </configSections>
09     <fluorinefx>
10         <settings>
11         </settings>
12     </fluorinefx>
13    
14     <system.web>
15         <httpModules>
16       <!--添加FluorineGateway的httpMudules-->
17       <add name="FluorineGateway" type="FluorineFx.FluorineGateway, FluorineFx"/>
18         </httpModules>
19         <compilation debug="true" targetFramework="4.0" />
20     </system.web>
21 </configuration>

  3.2、创建WEB-INF/flex目录,并创建二个文件remoting-config.xml,services-config.xml

remoting-config.xml内容

01 <?xml version="1.0" encoding="UTF-8"?>
02 <service id="remoting-service"
03     class="flex.messaging.services.RemotingService"
04     messageTypes="flex.messaging.messages.RemotingMessage">
05  
06     <!-- DO NOT CHANGE <adapters> SECTION-->
07     <adapters>
08         <adapter-definition id="dotnet"class="FluorineFx.Remoting.RemotingAdapter" default="true"/>
09     </adapters>
10  
11     <default-channels>
12         <channel ref="my-amf"/>
13     </default-channels>
14  
15   <destination id="fluorine">
16     <properties>
17       <source>*</source>
18     </properties>
19   </destination>
20  
21 </service>

services-config.xml内容

01 <?xml version="1.0" encoding="utf-8" ?>
02 <services-config>
03     <services>
04         <service-include file-path="remoting-config.xml" />
05     </services>
06      
07     <channels>
08         <channel-definition id="my-amf"class="mx.messaging.channels.AMFChannel">
09             <endpoint uri="http://{server.name}:{server.port}/{context.root}/Gateway.aspx"class="flex.messaging.endpoints.AMFEndpoint"/>
10             <properties>
11                       <legacy-collection>true</legacy-collection>
12             </properties>
13         </channel-definition>
14     </channels>
15 </services-config>

目录结构如下:

4、写Flash调用端

01 import org.bytearray.remoting.Service;
02 import org.bytearray.remoting.PendingCall;
03 import org.bytearray.remoting.events.ResultEvent;
04 import org.bytearray.remoting.events.FaultEvent;
05  
06 var gatewayUrl:String="http://localhost:7796/Gateway.aspx";
07 if (root.loaderInfo.parameters.remotingGatewayPath!=null) {
08     gatewayUrl=root.loaderInfo.parameters.remotingGatewayPath+"/Gateway.aspx";
09 }
10  
11  
12 var service:Service=newService("DataTableDemo.DataService",gatewayUrl,ObjectEncoding.AMF3);
13 var rpc:PendingCall=service.GetCountries("B");
14 rpc.addEventListener( ResultEvent.RESULT, success );
15 rpc.addEventListener( FaultEvent.FAULT, error );
16  
17  
18 function success( pEvt:ResultEvent ):void {
19     txtResult.text="当前网关路径:" + gatewayUrl + ""n调用成功,以下是返回的数据:"n";
20     var len:int=pEvt.result.length;
21     var i:int=0;
22     for (i=0; i<len; i++) {
23         txtResult.appendText("ID:"+pEvt.result[i].ID+",Country:"+pEvt.result[i].Country+",Capital:"+pEvt.result[i].Capital+""n");
24     }
25      
26 }
27  
28 function error( pEvt:FaultEvent ):void {
29     txtResult.text="当前网关路径:" + gatewayUrl + ""n调用失败,以下是详细信息:"n";
30     txtResult.appendText( pEvt.fault.description );
31 }

运行截图:

示例源文件下载: http://cid-2959920b8267aaca.office.live.com/self.aspx/Flash/01.DataTable.rar

作者:菩提树下的杨过
出处:http://yjmyzz.cnblogs.com 
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

posted on 2010-11-19 12:31 aiaiwoo 阅读(202) 评论(0)  编辑  收藏 所属分类: AC3/FLEX


只有注册用户登录后才能发表评论。


网站导航:
 
<2025年1月>
2930311234
567891011
12131415161718
19202122232425
2627282930311
2345678

导航

统计

常用链接

留言簿

随笔分类

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜