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

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

阅读更多

FluorineFx.NET提供了完善的RPC(Remote Procedure Call)功能,无论是通过Flash还是Flex开发的客户端应用(.swf)都可以非常简单方便的采用RPC的方式调用.NET的服务器端方法,.NET的服务器端同样也可以非常方便的呼叫客户端,调用客户端的方法(比如实现系统广播)。

一、客户端的RPC(客户端调用服务器端

要想实现客户端访问服务器端的方法,首先得对ActionScript中的NetConnection比较熟悉,该类提供了一个示例方法call()专们用来做RPC访问,该方法的定义如下:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->publicfunctioncall(command:String,responder:Responder,arguments):void

比如说我们在开发一个及时应用的时候,所有的客户端都需要同步服务器的系统时间,这个时候我们就可以在服务器端提供一个返回当前系统时间的方法给客户端调用。如下:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->//返回当前系统时间
publicstringGetServerTime()
{
returnDateTime.Now.ToString();
}

有了这个方法客户端就可以通过NetConnection的call()方法实行远程调用了,并通过Responder来处理调用的结果,如果所调用的服务器端方法没有返回值,则在调用的时候可以不使用Responder。如下完整的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">
<mx:Script>
<![CDATA[
importmx.controls.Alert;
importmx.rpc.events.ResultEvent;

privatevarnc:NetConnection;
privatevarresponder:Responder=newResponder(onResult,onError);

privatefunctionconnectionServer(event:MouseEvent):void
{
nc
=newNetConnection();
nc.connect(
"rtmp://localhost:1617/RPCDemo","abc","123");
nc.addEventListener(NetStatusEvent.NET_STATUS,onStatusHandler);
nc.client
=this;
}

privatefunctiononStatusHandler(event:NetStatusEvent):void
{
this.connStatus.text="连接状态:"+event.info.code;
if(event.info.code=="NetConnection.Connect.Success")
{
trace(
"连接服务器成功");
}
}

/*调用服务器端方法*/
privatefunctiononGetServerTime(event:MouseEvent):void
{
nc.call(
"GetServerTime",responder);
}

/*处理调用服务器端方法成功时返回的结果*/
privatefunctiononResult(result:String):void
{
this.txtResult.text="方法GetServerTime返回结果"+result;
}

/*处理调用服务器端方法时候时返回的结果*/
privatefunctiononError(event:Event):void
{
trace(
"调用服务器端方法出错");
}
]]
>
</mx:Script>
<mx:Buttonx="30"y="43"label="连接服务器"click="connectionServer(event)"/>
<mx:Labelx="30"y="75"width="296"id="connStatus"/>
<mx:Buttonx="30"y="112"label="调用服务端方法"click="onGetServerTime(event)"/>
<mx:Labelx="30"y="153"id="txtResult"width="296"/>
</mx:Application>

FluorineFx.Net的RPC就这么简单,客户端调用服务器端的方法,直接通过当前连接的call()方法调用,使用Responder来处理调用的结果。


二、服务器端的RPC(服务器端调用客户端)

客户端和服务器端的调用是可以双向的,服务器端也同样可以调用客户端的方法。无论是客户端还是服务器端,相互调用始终都是离不开当前的连接对象。如上面客户端是通过当前连接的call()方法实现的调用服务器端方法,那么服务器端调用客户端的方法同样如此,也是通过当前连接对象来处理。

FluorineFx中用于连接的接口是IConnection,只要客户端成功的连接上了服务器端,那么在服务器端就会保存所有连接到服务器端的连接对象的各种属性。实现调用客户端方法的则是IServiceCapableConnection接口,IServiceCapableConnection接口的定义如下所示:

如果要想实现服务器端调用客户端的方法,则必须使用此接口来完成,需要将当前连接的接口IConnection强制转化为

IServiceCapableConnection接口,然后调用其invoke()方法来完成服务器端对客户端方法的调用。

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->///<summary>
///调用客户端的方法
///</summary>
///<paramname="connection"></param>
publicvoidInvokeClient()
{

IServiceCapableConnectionconn
=FluorineContext.Current.ConnectionasIServiceCapableConnection;
if(connection!=null)
{
object[]args=newobject[]{GetServerTime()};
conn.Invoke(
"RecServerMessage",args);
}
}

在服务器端可以通过FluorineContext.Current.Connection获取到当前客户端的连接对象,然后将其转化为IServiceCapableConnection接口对象,调用其Invoke()方法便可实现调用客户端的方法。

这里需要注意一点就是,提供给服务器端调用的客户端方法必须是公共方法(public修饰的方法),否则服务器端会报"Not found method:方法名"的异常。如下代码块:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->/**
*接收服务器端的调用方法
*
*/
publicfunctionRecServerMessage(message:Object):void
{
Alert.show(message.toString());
}

FluorineFx.Net所提供的上面这两种功能是非常实用的,特别是在开发及时应用的时候,客户端RPC可以方便是实现将客户端是数据请求到服务器端进行处理,比如开发网络游戏中,游戏客户端的不同数据随时都在改变,那么我们就可以使用客户端RPC来实现这一需求。服务器端RPC同样可以应用于此,游戏中的数据变化了通过客户端RPC请求到服务器端,服务器端进行相与的业务计算和处理之后将客户端需要的数据通过服务器端RPC返回到当前请求的客户端。

或许有的朋友会想或是问到,如果我要开发一个聊天室,要实现系统广播消息是不是可以使用这种方式来实现。答案是肯定的,系统要广播消息,可以从服务器端获取到所有连接到服务器端的客户端,然后循环的调用客户端的方法来实现系统广播消息。关于如何实现系统广播这里我就不作介绍,因为FluorineFx.Net为我们提供了更好的方式来实现系统广播。有兴趣的朋友请关注我的后续文章,在下一篇文章里我将详细介绍这方面的知识点。

分享到:
评论

相关推荐

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

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

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

    ***是基于.NET平台的一个开源框架,用于实现实时通信(real-time communication)应用,尤其在Flash/Flex客户端与.NET服务端之间的通信。它允许开发者构建基于RTMP(Real Time Messaging Protocol)或AMF(Action ...

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

    4. **FluorineFxServerRPC(Server Remote Procedure Call)**:RPC机制允许Flex客户端直接调用.NET服务的方法,仿佛它们是本地方法一样。FluorineFx提供了这样的桥梁,使得异构系统间的通信变得简单高效。 5. **...

    flex与.net通信的FluorineFx模板

    Flex与.NET通信的FluorineFx模板是一个关键的技术实现,它使得基于Adobe Flex的前端应用能够有效地与后端的.NET Framework服务进行交互。FluorineFx是这个过程中的核心工具,它是一个开放源码的库,专门设计用于解决...

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

    Flex与ASP.NET之间的通信是构建富互联网应用程序(RIA)时常用的一种技术,它允许前端的Flex界面与后端的ASP.NET服务进行数据交互。在这个程序例子中,我们使用了 FluorineFx 框架来实现这种通信。FluorineFx 是一个...

    Flex 4 asp.net VS2010 FluorineFX

    在本教程中,我们将探讨如何使用Visual Studio 2010(VS2010)作为集成开发环境(IDE),结合FluorineFX这一开源的Adobe Flex到.NET的AMF Remoting框架,来实现Flex前端与ASP.NET后端的无缝通信。 首先,Flex 4是...

    Flex与.NET交互

    Flex与.NET交互是一种常见的跨平台应用开发场景,它允许基于Adobe Flex的前端应用程序与Microsoft .NET框架后端服务进行通信。这种交互使得开发者能够利用Flex的富互联网应用(RIA)特性与.NET的强大后端功能相结合...

    Flex与ASP.net交互

    【Flex与ASP.NET交互】指的是在开发Web应用时,使用Adobe Flex前端技术和Microsoft ASP.NET后端技术进行数据通信的方式。Flex是一种用于构建富互联网应用程序(RIA)的开发框架,而ASP.NET是.NET Framework的一部分...

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

    标题中的“Flex(PureMVC) asp.net FluorineFx操作数据库”表明这是一个关于使用Adobe Flex(一种基于ActionScript的前端开发框架)与后端ASP.NET通过FluorineFx进行数据交互并操作数据库的项目。以下是相关知识点的...

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

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

    Flex_FluorineFx_ASP.NET

    Flex_FluorineFx_ASP.NET 是一个技术组合,涉及到Adobe Flex、FluorineFx以及ASP.NET这三者在Web开发中的应用。这个主题主要关注如何利用这些技术创建富互联网应用程序(RIA)并实现客户端与服务器之间的高效通信。 ...

    Flex与.NET互操作 了解FluorineFx的环境配置(远程对象、网关、通道、目的地)

    Flex与.NET互操作是开发跨平台富互联网应用(RIA)时常见的需求,FluorineFx作为一款开源的Adobe Flex到.NET互操作框架,极大地简化了这一过程。本文将深入探讨如何利用FluorineFx配置环境,实现Flex与.NET之间的...

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

    FluorineFx是一个开源的.NET Remoting与Flash Remoting网关,它允许.NET应用程序和Adobe Flex应用程序之间进行远程通信。FluorineFx支持多种数据类型的远程调用,包括对象、DataTable和DataSet等,这对于在Flex...

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

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

Global site tag (gtag.js) - Google Analytics