频 道 直 达 - 新闻 - 培训 - 软件 - 教程 - 前沿 - 组网 - 系统应用 - 安全 - 编程 - 存储 - 操作系统 - 数据库 - 服务器 - 专题 - 产品 - 案例库 - 读书 - 博客 - BBS
51CTO.COM_中国最大的网络技术网站
找资料:

17.3.3 处理远程服务方法调用结果

作者: 张亚飞 出处:电子工业出版社  (  ) 砖  (  ) 好  评论 ( ) 条  进入论坛
更新时间:2007-04-23 17:18
关 键 词:Flash Remoting MX  Flash  远程  服务  .NET for Flash动态网站开发手札
阅读提示:前面几章我们介绍了应用Flash Remoting MX for .NET的基本步骤,并且创建了简单的数据库应用,下面我们来深入地了解一下Flash Remoting MX for .NET框架的基本原理,所以这也是本书最核心的一章。

当应用服务器返回远程服务方法调用的结果时,事件处理方法就会应用返回的数据,或者处理返回的出错信息。

例如,结果处理方法可以在Flash影片应用程序中显示调用结果,而出错处理方法可以在Flash影片应用程序中设置trace方法显示出错信息。

对于使用Service类创建到远程服务的连接并调用远程服务方法的,以及可以使用RelayResponder 构造器直接指定对象和事件处理方法的,你可以直接使用这里定义的对象和事件处理方法处理返回的结果或出错信息。

对于使用NetServices类和Connection类创建到远程服务的连接,并调用远程服务方法的,则有更多的选择,你可以定义结果处理层级。

1.结果处理层级

Flash Remoting MX支持下列事件处理层级:

(1)如果在使用Connection对象的getService方法时定义了Responder对象,那么Flash Remoting MX就会做下列事件:

①如果Responder对象中有一个形如functionName_Result的方法,并且functionName是调用的远程服务方法名,Flash Remoting MX就会将该方法调用的结果返回给与该方法同名的_Result方法。
②如果Responder对象中有一个名为onResult的方法,Flash Remoting MX就会将该方法调用的结果返回给该方法。

(2)如果在调用远程服务方法时定义了Responder对象,那么Flash Remoting MX就会将结果返回给该对象的onResult方法。

注意:在使用Connection对象的getService方法定义了Responder对象后,就不要同时使用远程服务方法定义Responder对象。如果这样做的话,Flash Remoting MX就会将远程服务方法中定义的Responder对象作为一个参数传递给远程服务方法,这样程序就会出问题。

(3)当在Flash创作环境开发阶段测试应用程序时,没有定义一个Responder对象,那么Flash Remoting MX就会在“输出”面板中显示调用结果。

2.结果处理策略

不同的结果处理程序为开发人员提供了各种不同的结果处理策略,开发人员可以使用不同的策略来适应应用程序的需要。

下面我们来详细介绍一下开发过程中要应用的结果处理策略。

(1)使用getService方法定义Responder对象

如果使用gatewayConnection.getService方法定义Responder对象,那么可以应用下面的技术:

①在gatewayConnection.getService方法中定义一个对象(一般是主时间轴this)作为Responder对象,然后在主时间轴中为每一个远程服务方法创建一个单独的_Result处理方法。

一般在满足下列条件时使用该技术:

◆对一个方法调用的_Result方法应与对另一个方法调用的_Result方法不同
◆对于所有远程服务中的所有方法来说,每个一方法都有一个独一无二的方法名。例如,你不能在两个远程服务调用中使用相同名字的方法:myFirstService. myFunction和myOtherService.myFunction,这样就会出问题,因为两个结果需要不同的处理过程
◆在一个远程服务中对一个特定方法的调用可以使用一个Responder对象处理

②在gatewayConnection.getService方法中定义一个对象(一般是主时间轴this)作为Responder对象,然后在主时间轴中创建一个onResult方法处理所有的远程服务方法调用结果。

这种技术只有在对所有远程服务方法的所有请求的结果可以使用一个方式进行处理时才适用。

③使用前两种方法的结合。在gatewayConnection.getService方法中定义一个对象(一般是主时间轴this)作为Responder对象,然后在主时间轴中为一些远程服务方法创建单独的_Result方法,然后为其他的远程服务方法创建一个onResult方法处理这些远程服务方法调用的结果。

一般在满足下列条件时使用该技术:

◆一些远程服务方法的调用结果的处理机制与其他远程服务方法调用结果的处理机制不同
◆处理机制不同的所有远程服务调用中的方法有一个独一无二的方法名
◆一些远程服务方法虽然方法名不同,但其调用结果的处理机制相同
◆对一个特定方法的不同调用,其调用结果可以使用一个Responder对象处理

使用处理层级的例子

下面的例子揭示了怎样使用主时间轴作为Responder对象,并且为一些远程服务方法定义一个onResult结果处理方法,以及为其他的一些远程服务方法定义特定的functionName_Result结果处理方法。

在该例中,有两个方法用于特定的functionName_Result结果处理方法,它们是getTemperature_Result和getForecast_Result(这两个方法用来显示返回的temperature和forecast)。而onResult结果处理方法用来在一个信息文本框中显示结果:

//初始化连接
if (inited == null) {
inited = true;
NetServices.setDefaultGatewayURL
("http://localhost/flashservices/gateway.aspx");
gatewayConnection = NetServices.createGatewayConnection();
//定义主时间轴作为默认的Responder对象
weatherService = gatewayConnection.getService("flashExamples.weatherStation",
this);
}
//结果处理方法
function getTemperature_Result(temperature) {
temperatureIndicator.text = temperature;
}
function getForecast_Result(forecast) {
forecastIndicator.text = forecast;
}
//默认的回应处理方法
function onResult(result) {
generalMessageBox.text = result;
}
//调用远程服务方法
weatherService.getTemperature("New York");
weatherService.getForecast("Chicago");
weatherService.getServiceStatus("San Francisco");
weatherService.getUsageStats();

(2)使用远程服务方法定义Responder对象

如果要在调用远程服务方法时定义Responder对象,可以使用下面的技术:

①定义一个Responder对象。使用结果处理方法将结果值赋给一个Responder对象,可以将Responder对象的一个实例作为gatewayConnection.getService方法的一个参数传递给它。

使用这种技术比使用this作为Responder对象更加面向对象,这允许你使用更加结构化的代码。

②定义几个不同的Responder对象。使用结果处理方法将结果值赋给不同的Responder对象,可以将每一个Responder对象的一个实例作为serviceName.functionName调用时的一个参数传递给它。

该技术允许开发人员为特定Responder对象创建方法,在这种情况下,一些service应有相同的方法名,但是返回的数据不同;该技术也允许开发人员为一个远程服务方法创建几个不同的结果处理方法。

③使用上述两种方法的结合。为一些远程服务方法使用多个Responder对象;为另一些远程服务方法使用单独的一个Responder对象。

下面是在远程服务方法调用中为每一方法定义一个result对象的例子,与前面介绍的例子目的基本相同,但是我们在该例的远程服务方法调用中为每一调用定义了回应处理对象。

在该例中,有三个回应处理对象,它们是tempResult、forecastResult和generalResult(这三个回应处理对象分别用来显示返回的temperature、forecast和其他的远程服务方法)。每一个回应处理对象中有一个onResult结果处理方法用来处理远程服务方法调用返回的结果:

//初始化连接
if (inited == null) {
inited = true;
NetServices.setDefaultGatewayURL
("http://localhost/flashservices/gateway.aspx");
gatewayConnection = NetServices.createGatewayConnection();
//在创建Service类实例时不要定义默认的Responder对象
weatherService = gatewayConnection.getService
("flashExamples.weatherStation");
}
//Temperature的结果处理对象
function tempResult() {
this.onResult = function(temperature) {
temperatureIndicator.text = temperature;
};
}
//Forecast的结果处理对象
function forecastResult() {
this.onResult = function(forecast) {
forecastIndicator.text = forecast;
};
}
//General的结果处理对象
function generalResult() {
this.onResult = function(result) {
generalMessageBox.text = result;
};
}
//调用远程服务方法,并指定结果处理方法的一个实例作为第一个参数
weatherService.getTemperature(new tempResult(), "New York");
weatherService.getForecast(new forecastResult(), "Chicago");
weatherService.getServiceStatus(new generalResult(), "San Francisco");
weatherService.getUsageStats(new generalResult());

【责任编辑:火凤凰 TEL:(010)68476606-8007】

回书目   上一节   下一节
发表
查看
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 最 大 的 网 络 技 术 网 站 ·
技 术 成 就 梦 想
订阅技术快讯
电子杂志下载
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。
名称:Vista精品应用黄皮书
简介:《Vista精品应用黄皮书》囊括了Vista的各方面内容。此次的精简版,是将里面的内容做了提取,便于用户下载和使用。内容包含了各种Vista的安装与实施、技巧与解析以及各种Vista相关学习文档和相关软件的安全下载。该电子书是了解和应用Vista人员必备的工具手册,并且也是第一本
名称:2006中国IT论坛精品集合
简介:本书由“51CTO论坛推广联盟”制作完成。书中所有内容均来自各联盟成员的论坛(网站)。制作本书的目的是为了集中大家的优势资源,将更多更精彩的内容带给广大技术爱好者。本书是联盟成立以来制作的第一本书。
关键字阅读
频道精选
主编信箱 热线:010-66476606 告诉我们您想看的:专题 文章
关于我们 | 诚聘英才 | 联系我们 | 网站大事 | 意见反馈 | 网站地图
Copyright©2005-2007 51CTO.COM 版权所有