`
isiqi
  • 浏览: 16483705 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Flex与.NET互操作(十四):FluorineFx的AMF(Action Message Format)通信

阅读更多

AMF(Action Message Format)在开发Flash/Flex应用中使用频率是非常高的,相对普通的HTTP、WebService的SOAP等多种数据通信方式的效率更高,有人曾经做过这方面的测试,详细可以访问:http://xinsync.xju.edu.cn/index.php/archives/2162。本文将结合FluorineFx来提供通信服务接口,在客户端通过Flex来访问,简单的介绍下关于使用FluorineFx的AMF(Action Message Format)协议通信的用法。

首先建立一个FluorineFx服务库,并建立一个数据传输对象(DTO),为该对象添加[FluorineFx.TransferObject]表示该对象可以用作于FluorineFx的数据传输对象,这个对象将会在本文后面用到,如下代码块:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->namespaceFxDotNet.Services.DTO
{
[FluorineFx.TransferObject]
publicclassBook
{
publicintID{get;set;}
publicstringName{get;set;}
publicstringAuthor{get;set;}
publicdoublePrice{get;set;}

publicBook()
{}

publicBook(intid,stringname,stringauthor,doubleprice)
{
this.ID=id;
this.Name=name;
this.Author=author;
this.Price=price;
}
}
}

接下来就需要提供一个FluorineFx的远程服务(即标记有[RemotingService]的对象),通过该服务提供对外访问的方法接口,如下代码块:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->namespaceFxDotNet.Services
{
[RemotingService]
publicclassDataServices
{
publicDataServices()
{
}

///<summary>
///获取服务端的系统时间
///</summary>
///<returns></returns>
publicstringGetServerTime()
{
returnDateTime.Now.ToString();
}

publicArrayCollectionGetBooks()
{
ArrayCollectionarray
=newArrayCollection();
array.Add(
newBook(1,"三国演义","罗贯中",100.00));
array.Add(
newBook(2,"西游记","吴承恩",200.00));
array.Add(
newBook(3,"水浒传","施耐庵",300.00));
array.Add(
newBook(4,"红楼梦","曹雪芹",400.00));

returnarray;
}
}
}


通过FluorineFx网站来宿主该远程服务,通过Flex的配置文件services-config.xml配置远程访问的AMF连接通道。

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><channels>
<channel-definitionid="my-amf"class="mx.messaging.channels.AMFChannel">
<endpointuri="http://{server.name}:{server.port}/{context.root}/Gateway.aspx"class="flex.messaging.endpoints.AMFEndpoint"/>
<properties>
</properties>
</channel-definition>
</channels>

FluorineFx提供的远程服务(RemotingService),使用Flex、Flash或Silverlight开发的客户端都是可以访问的,要实现客户端的远程调用其实是很简单的,这里以Flex作为示例进行演示,设置通信协议为AMF3,然后直接调用当前连接到服务器端连接对象的call()方法就可以实现远程调用,详细请查看下面完整的Flex示例。

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><?xmlversion="1.0"encoding="utf-8"?>
<mx:Applicationxmlns:mx="http://www.adobe.com/2006/mxml"layout="absolute"creationComplete="init()"fontSize="12">
<mx:Script>
<![CDATA[
importmx.collections.ArrayCollection;
importmx.controls.List;
importmx.rpc.events.FaultEvent;
importmx.rpc.events.ResultEvent;
privatevarnc:NetConnection;
privatevarrs:Responder;

privatefunctioninit():void
{
nc
=newNetConnection();
rs
=newResponder(onResult,onStatus);

nc.objectEncoding
=ObjectEncoding.AMF3;
nc.connect(
"http://localhost:2311/FxDotNet.Web/Gateway.aspx");
nc.client
=this;
}

privatefunctiononResult(result:String):void
{
this.lbServerTime.text="服务端系统时间为:"+result;
}

privatefunctiononStatus(event:Object):void
{
trace(
"Error");
}

privatefunctiongetServerTime(event:MouseEvent):void
{
//服务器端所提供的RemotingService的全限定名
nc.call("FxDotNet.Services.DataServices.GetServerTime",rs);
}
]]
>
</mx:Script>
<mx:Buttonx="19"y="28"label="获取服务器系统时间"click="getServerTime(event)"/>
<mx:Labelx="19"y="60"width="402"id="lbServerTime"/>
</mx:Application>

同样可以使用AMF来做大数据的传输,比如要传递一个集合、数组、DataTable或是DataSet等,下面以集合做为示例演示,ActionScript 3.0中新增了ArrayCollectin类,FluorineFx在服务器端对ActionScript 3.0的ArrayCollection对进行了序列化映射封装,服务端FluorineFx.AMF3.ArrayCollection类型的对象可以直接被客户端的ArrayCollection所接收。

如上面FluorineFx所提供的远程服务接口中的GetBooks()方法,Flex调用此方法就会得到一个ArrayCollection对象,通过调试跟踪返回的数据可以很清楚的分析这些数据,如下图示:

详细请看下面的Flex完整示例代码:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><?xmlversion="1.0"encoding="utf-8"?>
<mx:Applicationxmlns:mx="http://www.adobe.com/2006/mxml"layout="absolute"fontSize="12"
width
="541"height="302"creationComplete="init()">
<mx:Script>
<![CDATA[
importmx.collections.ArrayCollection;
importmx.controls.List;
importmx.rpc.events.FaultEvent;
importmx.rpc.events.ResultEvent;
privatevarnc:NetConnection;
privatevarrs:Responder;

privatefunctioninit():void
{
nc
=newNetConnection();
rs
=newResponder(onResult,onFault);

nc.objectEncoding
=ObjectEncoding.AMF3;
nc.connect(
"http://localhost:2311/FxDotNet.Web/Gateway.aspx");
nc.client
=this;
}

privatefunctiongetBook(event:MouseEvent):void
{
nc.call(
"FxDotNet.Services.DataServices.GetBooks",rs);
}

privatefunctiononResult(result:ArrayCollection):void
{
this.bookGrid.dataProvider=result;
}

privatefunctiononFault(event:Object):void
{
trace(
"Error");
}
]]
>
</mx:Script>

<mx:Buttonx="44"y="46"label="获取图书信息"click="getBook(event)"/>
<mx:DataGridx="44"y="78"id="bookGrid">
<mx:columns>
<mx:DataGridColumnheaderText="编号"dataField="ID"/>
<mx:DataGridColumnheaderText="书名"dataField="Name"/>
<mx:DataGridColumnheaderText="作者"dataField="Author"/>
<mx:DataGridColumnheaderText="价格"dataField="Price"/>
</mx:columns>
</mx:DataGrid>
</mx:Application>

除了使用FluorineFx所提供的ArrayCollection外,同样可以使用我们熟悉的Object[],List<Object>,DataTable等常用类型来作为数据返回的类型,其中Object[]和List<Object>类型的数据返回到客户段能够直接被客户端所接收,如下使用Object[]作数据返回类型的代码块:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->/*************服务端方法*************/
publicBook[]GetBookArray()
{
Book[]book
=newBook[]
{
newBook(1,"三国演义","罗贯中",100.00),
newBook(2,"西游记","吴承恩",200.00),
newBook(3,"水浒传","施耐庵",300.00),
newBook(4,"红楼梦","曹雪芹",400.00)
};
returnbook;
}
/*************客户端方法*************/
privatefunctiononResult(result:Array):void
{
//
}

下面是以List<Object>类型返回的代码示例代码,客户段可以使用ArrayCollection直接接收:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->/*************服务端方法*************/
///<summary>
///以泛型类型返回给客户端
///</summary>
///<returns></returns>
publicList<Book>GetBookList()
{
List
<Book>list=newList<Book>
{
newBook(1,"三国演义","罗贯中",100.00),
newBook(2,"西游记","吴承恩",200.00),
newBook(3,"水浒传","施耐庵",300.00),
newBook(4,"红楼梦","曹雪芹",400.00)
};
returnlist;
}
/*************客户端方法*************/
privatefunctiononResult(result:ArrayCollection):void
{
//
}

如果要使用DataTable类型做方法的数据返回类型就需要注意下,服务器端直接返回DataTable类型的数据客户端是不能直接接收解析的,要使客户断方便解析所返回的DataTable类型数据,FluorineFx提供了DataTableTypeAttribute,为返回DataTable类型的方法加上DataTableTypeAttribute后返回给客户端,客户端就可以直接使用ArrayCollection接收了。

返回DataTable类型
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->/******************服务端方法***********************/
[DataTableType(
"Book","FxDotNet.Services.DTO.Book")]
publicDataTableGetBookTable()
{
DataTabledt
=newDataTable("Book");
dt.Columns.Add(
"ID",typeof(int));
dt.Columns.Add(
"Name",typeof(string));
dt.Columns.Add(
"Author",typeof(string));
dt.Columns.Add(
"Price",typeof(double));

DataRowdr
=dt.NewRow();
dr[
"ID"]=1;
dr[
"Name"]="《三国演义》";
dr[
"Author"]="罗贯中";
dr[
"Price"]=100.00;
dt.Rows.Add(dr);

dr
=dt.NewRow();
dr[
"ID"]=2;
dr[
"Name"]="《西游记》";
dr[
"Author"]="吴承恩";
dr[
"Price"]=200.00;
dt.Rows.Add(dr);

dr
=dt.NewRow();
dr[
"ID"]=3;
dr[
"Name"]="《水浒传》";
dr[
"Author"]="施耐庵";
dr[
"Price"]=300.00;
dt.Rows.Add(dr);

dr
=dt.NewRow();
dr[
"ID"]=4;
dr[
"Name"]="《红楼梦》";
dr[
"Author"]="曹雪芹";
dr[
"Price"]=400.00;
dt.Rows.Add(dr);

returndt;
}
/******************客户端方法***********************/
privatefunctiononResult(result:ArrayCollection):void
{
//doother
}

关于FluorineFx的AMF就简单介绍这些,要想了解更多的Flex客户端与.NET服务器端通信,可以访问这里

本文示例代码下载 FluorineFxAMF.rar

分享到:
评论

相关推荐

    fluorineFx实现Flex与.NET交互实例代码

    在实际开发中,这些代码示例可以帮助开发者理解如何设置服务代理,定义AMF(Action Message Format)数据交换,以及处理异常和错误。通过FluorineFx,开发人员能够创建高性能、高度交互的Flex应用,同时充分利用.NET...

    Flex与.NET互操作(十):FluorineFx.Net的及时通信应用(ApplicationAdapter)(一)

    它允许开发者构建基于RTMP(Real Time Messaging Protocol)或AMF(Action Message Format)的实时应用,如聊天系统、视频会议、游戏等。***的一个核心概念就是应用程序适配器(ApplicationAdapter),它扮演着管理...

    flex与.net通信的FluorineFx模板

    在Flex中,这通常通过AMF(Action Message Format)协议来实现,AMF是一种高效的数据交换格式,能将数据序列化为二进制,从而提高传输效率。 FluorineFx支持AMF0和AMF3两种版本,AMF3是更现代、更高效的一种,它能...

    FluorineFxAMF

    **FluorineFx AMF:Action Message Format通信在Flex与.NET之间的应用** FluorineFx是一款开源的.NET框架,专门用于实现Adobe Flex与Microsoft .NET Framework之间的远程方法调用(RPC)服务。它的核心功能是支持...

    Flex与.NET互操作(十一):FluorineFx.Net的及时通信应用(Remote Procedure Call)(二)

    Flex与.NET互操作系列文章的第十一部分主要探讨了FluorineFx.NET框架下的远程过程调用(RPC)机制,这是一种实现客户端(Flash或Flex)与服务器端(.NET)高效通信的方法。FluorineFx.NET为跨平台交互提供了强大的...

    Flex与.NET互操作(十二):FluorineFx.Net的及时通信应用(Remote Shared Objects)(三)

    Flex与.NET互操作的核心在于 FluorineFx.Net 框架,它允许 Flex 客户端与 .NET 服务端进行高效的数据交换。本篇主要关注的是 Remote Shared Objects(远程共享对象),这是一个强大的功能,用于在多客户端之间实现...

    AMF.rar_FluorineFx_FluorineFx amf_amf__flex_flex amf

    标题中的"AMF.rar_FluorineFx_FluorineFx amf_amf__flex_flex amf"表明这是一个关于AMF(Action Message Format)技术的压缩包,其中包含了FluorineFx的相关资料。FluorineFx是.NET平台上开源的Adobe Flash Remoting...

    Flex与ASP.Net通信(FluorineFx)程序例子

    FluorineFx 是一个开源的AMF(Action Message Format)网关,它可以将Flex与ASP.NET无缝对接,提供高效的二进制数据传输,提高了应用性能。 首先,我们需要理解Flex和ASP.NET各自的角色。Flex作为客户端展示层,...

    Flex 4 asp.net VS2010 FluorineFX

    它实现了Adobe的Action Message Format (AMF),这是一种高效的数据交换协议,用于在Flex客户端和ASP.NET服务器之间传输数据。通过AMF,可以实现低延迟、高效的双向通信,类似于AJAX,但支持更多的数据类型和复杂对象...

    Flex与.NET互操作(十三):FluorineFx.Net实现视频录制与视频回放

    FluorineFx.Net是一个强大的工具,它不仅提供了AMF(Action Message Format)通信、RTMP(Real-Time Messaging Protocol)协议、RPC(Remote Procedure Call)以及远程共享对象,还支持视频流服务,这使得开发者能够...

    Flex与.NET交互

    在Flex与.NET的交互中,FluorineFx是一个重要的第三方库,它作为一个AMF(Action Message Format)服务器端代理,实现了Flex客户端与.NET服务之间的无缝通信。AMF是一种二进制数据格式,用于提高数据传输效率,降低...

    Flex与ASP.net交互

    在这种模式下,Flex应用可以通过AMF(ActionScript Messaging Format)协议与FluorineFX这个开源AMF网关进行交互。FluorineFX是专门为Flex和.NET之间数据类型转换设计的,它支持ActionScript 2.0和3.0,同时也能作为...

    Flex(PureMVC) asp.net FluorineFx操作数据库

    4. **FluorineFx**:FluorineFx是.NET Framework上的一个开源AMF(Action Message Format)Remoting解决方案,它允许Flex客户端与ASP.NET服务器进行高效的数据交换。AMF是一种二进制格式,可以提高网络通信的性能和...

    Flex_FluorineFx_ASP.NET

    2. FluorineFx:FluorineFx是.NET平台上的一种开源AMF(Action Message Format)Remoting框架。AMF是一种高效的二进制数据格式,用于在客户端(如Flex)和服务器端之间传输数据。FluorineFx使得Flex和ASP.NET应用...

    Flex+.Net+Cairngorm+Fluorine的HelloWorld演示

    FluorineFX是.NET平台上的一种Flash Remoting解决方案,它使得Flex客户端可以与.NET服务器进行无缝通信,支持AMF(Action Message Format)协议,提高了数据传输效率。 在这个HelloWorld演示中,你可能会学到以下...

    Flex与.Net

    3. FluorineFx:这是.NET平台上流行的Flex与.NET通信框架,用于实现在Flex应用和ASP.NET服务之间的AMF(Action Message Format)数据交换。 4. Microsoft Visual Studio Team System 2008:这是.NET开发的主要IDE,...

Global site tag (gtag.js) - Google Analytics