利用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的服务端代码

using System.Data;
using FluorineFx;

namespace DataTableDemo
{
    [RemotingService]
    public class DataService
    {

        [DataTableType("随便填写什么")]
        public object GetCountries(string capital)
        {
            DataTable tbl = new DataTable();
            tbl.Columns.Add("ID", typeof(System.Int32));
            tbl.Columns.Add("Country", typeof(System.String));
            tbl.Columns.Add("Capital", typeof(System.String));

            tbl.Rows.Add(1, "Andorra", "Andorra");
            tbl.Rows.Add(2, "United Arab", "Abu Dhabi");
            tbl.Rows.Add(3, "BeiJing", "China");

            if (capital.Length > 0)
            {
                DataTable tbl2 = tbl.Clone();                
                DataRow[] drs =  tbl.Select("Capital like '%" + capital + "%'");
                foreach (var item in drs)
                {
                    tbl2.Rows.Add(item[0], item[1], item[2]);
                }
                return tbl2;
            }

            return tbl;

        }
    }
}

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

3、添加一些配置文件

3.1、修改web.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
	<configSections>
    <!--添加fluorinefx配置节信息-->
    <sectionGroup name="fluorinefx">
			<section name="settings" type="FluorineFx.Configuration.XmlConfigurator, FluorineFx" requirePermission="false"/>
		</sectionGroup>
	</configSections>
	<fluorinefx>
		<settings>
		</settings>
	</fluorinefx>
  
	<system.web>
		<httpModules>
      <!--添加FluorineGateway的httpMudules-->
      <add name="FluorineGateway" type="FluorineFx.FluorineGateway, FluorineFx"/>
		</httpModules>
		<compilation debug="true" targetFramework="4.0" />
	</system.web>
</configuration>

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

remoting-config.xml内容

<?xml version="1.0" encoding="UTF-8"?>
<service id="remoting-service"
    class="flex.messaging.services.RemotingService"
    messageTypes="flex.messaging.messages.RemotingMessage">

	<!-- DO NOT CHANGE <adapters> SECTION-->
    <adapters>
        <adapter-definition id="dotnet" class="FluorineFx.Remoting.RemotingAdapter" default="true"/>
    </adapters>

    <default-channels>
        <channel ref="my-amf"/>
    </default-channels>

  <destination id="fluorine">
    <properties>
      <source>*</source>
    </properties>
  </destination>

</service>

services-config.xml内容

<?xml version="1.0" encoding="utf-8" ?> 
<services-config>
    <services>
  		<service-include file-path="remoting-config.xml" /> 
    </services>
    
    <channels>
        <channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel">
            <endpoint uri="http://{server.name}:{server.port}/{context.root}/Gateway.aspx" class="flex.messaging.endpoints.AMFEndpoint"/>
            <properties>
				      <legacy-collection>true</legacy-collection>
            </properties>
        </channel-definition>
    </channels>
</services-config>

目录结构如下:

4、写Flash调用端

import org.bytearray.remoting.Service;
import org.bytearray.remoting.PendingCall;
import org.bytearray.remoting.events.ResultEvent;
import org.bytearray.remoting.events.FaultEvent;

var gatewayUrl:String="http://localhost:7796/Gateway.aspx";
if (root.loaderInfo.parameters.remotingGatewayPath!=null) {
	gatewayUrl=root.loaderInfo.parameters.remotingGatewayPath+"/Gateway.aspx";
}


var service:Service=new Service("DataTableDemo.DataService",gatewayUrl,ObjectEncoding.AMF3);
var rpc:PendingCall=service.GetCountries("B");
rpc.addEventListener( ResultEvent.RESULT, success );
rpc.addEventListener( FaultEvent.FAULT, error );


function success( pEvt:ResultEvent ):void {
	txtResult.text="当前网关路径:" + gatewayUrl + "\n调用成功,以下是返回的数据:\n";
	var len:int=pEvt.result.length;
	var i:int=0;
	for (i=0; i<len; i++) {
		txtResult.appendText("ID:"+pEvt.result[i].ID+",Country:"+pEvt.result[i].Country+",Capital:"+pEvt.result[i].Capital+"\n");
	}
	
}

function error( pEvt:FaultEvent ):void {
	txtResult.text="当前网关路径:" + gatewayUrl + "\n调用失败,以下是详细信息:\n";
	txtResult.appendText( pEvt.fault.description );
}

运行截图:

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏飞扬的花生

Html5上传插件封装

      前段时间将flash的上传控件替换成使用纯js实现的,在此记录 1.创建标签 <div class="camera-area" style="dis...

43280
来自专栏木宛城主

SharePoint下用C#代码上传文档至文档库的子文件夹中

SharePoint的文档库非常方便,可以管理日常的文档,更强大的是可以创建文件夹来分类,通常在UI界面上是非常简单了,点击文件夹,Create a Fold...

22380
来自专栏木宛城主

两天完成一个小型工程报价系统(三层架构)

花了两天,整理了一下三层架构,顺便练了一个小型三层架构——工程报价系统。 功能很简单,完成基本的增删改查 搭建项目三层结构 ? 界面的设计以及美化 ...

36690
来自专栏逸鹏说道

C#通过WMI的wind32 的API函数实现msinfo32的本地和远程计算机的系统日志查看功能

先不说如何实现,先来看看效果图: ? 读取远程的需要提供下远程的计算用户名和密码即可。 如何实现这个代码功能,请看如下代码部分: #region//获取日志文件...

35350
来自专栏跟着阿笨一起玩NET

ASP.NET通过http/https的POST方式,发送和接受XML文件内容

 本文转载:http://hi.baidu.com/ysyhyt/item/5011ae39ce3cf49fb80c0395

57310
来自专栏Porschev[钟慰]的专栏

Asp.Net开发等级星使用(Jquery Rating)

插件参数: rater第一个参数是AJAX提交的URL rater第二个参数 maxvalue:最大星数 curvalue:默认选择多少颗星 title:鼠标放...

24370
来自专栏C#

C#的网络适配器操作

     网络的相关设置在项目开发中有较多的应用,有时候需要在项目中对网络信息进行相关设置。      现在提供提供几种相关的辅助方法类。 (1).IP地址 ...

22170
来自专栏技术之路

lock小记

都快把lock忘了用wcf 给手持设备做服务的时候可能会有并发操作但又忘了lock的使用情况 做个小例子,怕自己再忘了 不加lock的时候 结果可能 是负的下面...

20160
来自专栏王磊的博客

c# 检测cpu使用率[测试通过]

创建一个控制台应用程序,代码如下 using System; using System.Collections.Generic; using System.Li...

36140
来自专栏菩提树下的杨过

asp.net与asp的session共享 及 asp的请求拦截

asp.net 与 asp 的session是无法直接共享的(底层的处理dll也不一样),要想互通session,只能用变通的办法: 一、asp.net -> ...

27270

扫码关注云+社区

领取腾讯云代金券