使用Flash Remoting实现Flash与服务器通信

这是一篇讲解怎样使用Flash Remoting实现Flash与服务器通信入门级实例教程。通过本例的学习,我 们将了解使用Flash Remoting开发Flash RIAs应用的基本流程。本实例重点讲述ActionScript。

首先,我们将了解一下与远程服务通信的公用Flash ActionScript,接着我们将学习如何编写提供远程服务所需的服务器端代码,包括 ColdFusion, J2EE, .NET,和PHP四个版本。

  • ActionScript

总体上说,客户端所用的ActionScript基本上是相同的,当然服务名称和Flash Remoting网关URL可能不一样,这取决于你采用的编程语言和架设 Web应用时设置的虚拟路径或者上下文根。如果想了解不同编程语言下不同服务类型的网关URL和服务名称的详情,请参看Flash Remoting支持的远程服务

请打开附件中的helloworld_start.fla源文件,将其另存为helloworld_finished.fla。在主时间轴as层的第一帧中添加 如下代码。

//首先导入类。这些类代码分别用来创建远程Service对象实例(Service)、等待响应对象(PendingCall)、延迟响
//应器(RelayResponder)对象,处理调用远程服务方法成功(或失败)而返回的事件对象(ResultEvent或FaultEvent )。
import mx.remoting.Service;
import mx.remoting.PendingCall;
import mx.rpc.RelayResponder;
import mx.rpc.ResultEvent;
import mx.rpc.FaultEvent;
import mx.controls.Button;
import mx.controls.TextInput;
import mx.controls.Label;
//设置实例变量
var submit_button:Button;
var userName_ti:TextInput;
var result_lbl:Label;
//紧接着初始化各种编程语言下所需的远程服务实例helloService。远程Service对象实例有五个参数,
//其中Flash Remoting网关URL和服务名称是必须的。
//设置ColdFusion下的远程服务实例
//var gatewayURL:String = "http://localhost:8500/flashservices/gateway";
// 设置JRun下的远程服务实例
//var gatewayURL:String = "http://localhost:8101/flashservices/gateway";
// 设置其它JEE下的远程服务实例
//var gatewayURL:String = "http://localhost:8080/flashservices/gateway";
// 设置.NET下的远程服务实例
var gatewayURL:String = "http://localhost/flashservices/gateway.aspx";
// 设置PHP下的远程服务实例
//var gatewayURL:String = "http://localhost/flashservices/gateway.php"; 
var helloService:Service = new Service(gatewayURL, null, "tutorials.remoting.HelloWorld");
//接下来定义click回调函数,在该函数中调用helloService远程服务的sayHello()方法并返回一个等待响应对象Pc。
//sayHello()方法是在创建服务器端远程服务时定义的,该方法用一个形式参数userName来接收用户的文本输入
//下一步新建一个延迟响应器对象来调用sayHello()方法,并将其指向等待响应对象Pc的
//responder属性。该延迟响应器对象告知远程
//服务将用sayHelloResult函数来返回成功调用的结果,用sayHelloFault函数来返回调用失败而返回的错误。
function click():Void {
	var pc:PendingCall = helloService.sayHello(userName_ti.text);
	pc.responder = new RelayResponder(_root, "sayHelloResult", "sayHelloFault");
}
//再接下来创建sayHelloResult()处理函数。该函数以一个结果事件对象(ResultEvent)为参数,该对象的
//result属性包含调用成功调用的结果。
function sayHelloResult(re:ResultEvent):Void {
	// 显示调用远程服务方法成功而返回的结果
	results_lbl.text = re.result;
}
//然后创建sayHelloFault()处理函数。该函数以一个错误事件对象(FaultEvent)为参数,该对象的fault属性
//包含调用远程服务失败而返回的错误。
function sayHelloFault(fe:FaultEvent):Void {
	// 显示调用远程服务方法失败而返回的结果
	results_lbl.text = fe.fault.faultstring;
}
//最后调用 addEventListener()方法将广播事件及侦听器对象注册到组件实例 submit_button。
submit_button.addEventListener("click", this);
  • 远程服务代码

Flash Remoting的使用,让我们能在开发RIAs时真正做到客户端与服务器端的代码分离。如前文所言,我们可以用多数主流编程语言来实现本例的 远程服务。

  1. ColdFusion版
  2. J2EE版
  3. .NET版
  4. PHP版

点击查看最终效果。如果他不明白,请参看源文件

发表评论