Welcome

首页 / 软件开发 / Flex / Flex与.NET互操作(十一)

Flex与.NET互操作(十一)2011-07-11 博客园 BeniaoFlex与.NET互操作(十一):基于FluorineFx.Net的及时通信应用(Remote Procedure Call)(二)

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

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

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

public function call(command:String, responder:Responder, ...arguments):void

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

//返回当前系统时间
public string GetServerTime()
{
return DateTime.Now.ToString();
}

有了这个方法客户端就可以通过NetConnection的call()方法实行远程调用了,并通过Responder来处理调用的结果,如果所调 用的服务器端方法没有返回值,则在调用的时候可以不使用Responder。如下完整的Flex实例代码:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" fontSize="12">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.rpc.events.ResultEvent;

private var nc:NetConnection;
private var responder:Responder = new Responder(onResult,onError);

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

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

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

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

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

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