简单介绍Flex与Web服务端的交互

Flex 专栏收录该内容
24 篇文章 0 订阅

简单介绍信FlexWeb服务的交互

主要内容:

       1.ActionScript与服务端的基本交互方式(REST).

       2.ActionScript特有的数据传输格式(AMF)与服务器交互.

       3.FlexWebService.

 

要实现ActionScript与服务端交互, 首先必须知道以下几个类:

       URLRequest

       记录请求服务端的URL信息, URLLoader进行发送操作.

      URLVariables

       保存向服务端请求所需的参数, 一般用于POST方式传输,GET方式传输不需要使用.

       URLRequestMethod

       该类只有两个静态常量值, 一个是POST, 一个是GET, 可以把它当作是一个枚举类型, 用于指定URL请求时使用POST方式或是GET方式.

       URLLoader

       真正与服务端打交道的类, 通过load方法把一个Reuqest发送给服务端, load之前必须给该对象添加一个Complete事件的监听器,接收服务器返回的信息. 传输过程中有可能产生IO错误, 有必要时可以为该对象添加IOError监听器.

 

例子:

var request: URLRequest = new URLRequest("http://localhost");

//默认为URLRequestMethod.GET, 若使用GET方式可以不指定

request.method = URLRequestMethod.POST;

//创建一个参数变量对象,用于保存所有向服务发送的参数数据, GET方式可以不使用

var vars: URLVariables = new URLVariables ();

vars["varName"] = varValue; //把参数键,值对放到vars对象中.

vars["var2Name"] = var2Value;

request.data = vars;        //把参数对象放进Request对象中作为参数

// 通过request对象创建一个loader,

var loader: URLLoader = new URLLoader(request);

loader.addEventListener(       //loader对象添加完成时的监听器.

       Event.COMPLETE,

       function(e: Event):void         //临时定义一个监听器

       {

              //服务端返回的数据是保存在loaderdata,通过以下语句可以得到

              trace(URLLoader(e.target).data );//在监听器里处理服务端返回的数据

              //complete

              // process the data;

       }

);

loader.addEventListener(       //IOError监听器

       IOErrorEvent.IO_ERROR,

       //临时监听器,IO错误的处理在该函数中处理

       function(e: IOErrorEvent): void {/* process the err;*/}

);

loader.load(request);//request对象发送到服务端.当请求完成,则会自动触发COMPLETE事件

 

REST实例演示

通过AMF数据格式与服务器交互

什么是AMF?

       AMFAdobe公司制定一套ActionScript与服务端交互的数据格式, Flex本身已经有相关的类可以直接使用,但服务端则需要一个可以解释该格式的包或框架, 幸运的时现在已经存在大部分服务端语言解释AMF格式包与类库, 所以不用担心处理该格式的问题.

通过AMF数据格式与服务器交互

怎样在Flex中使用AMF数据格式进行传输?

       Flex中使用AMF需要通过以下几个类进行:

       RemoteObject, 可以作为Flex中的一个控件使用.

       AsyncToken, 保存一个请求的状态, 给请求添加监听器.

       AsyncResponder, 用于设置请求的两种返回结果, 返回成功或失败

       ResultEvent, 返回成功的事件对象, 返回的数据保存在该对象的result属性里.

       FaultEvent, 返回失败的事件对象, 该对象保存请求失败的所有信息.

通过AMF数据格式与服务器交互

例子(后台采用django + pyAMF):

ApplicationMXML文件里创建一个RemoteObject对象

<mx:RemoteObject id="djangoService" destination="myservice"

          showBusyCursor="true"/>

Flex编写以下代码:

//djangoService是面上创建一个RemoteObject对象, echo是服务端提供的一个无参数方法, 用于显示信息.

var token:AsyncToken=djangoService.echo();

//调用服务端的方法后返回一个Token对象

// Token添加成功与失败的监听器.

token.addResponder(new AsyncResponder(AfterEchoRet,falutHandler));

 

通过AMF数据格式与服务器交互

//定义成功与失败的监听器.

private function AfterEchoRet(result:ResultEvent):void{

       trace(result.result);

       //在这里处理返回的数据.数据保存于result属性中.

}

private function falutHandler(error:FaultEvent):void{

       trace(error.message);

}

 

程序代码就只有这么多, 不过还需要一个Services-config.xml配置文件.

还需要在工程属性里添加一个参数, 设置如下:

通过AMF数据格式与服务器交互

services-config.xml内容如下:

<?xml version="1.0" encoding="UTF-8"?>

<services-config>

   <services>

    <service id="ananasService" class="flex.messaging.services.RemotingService"  messageTypes="flex.messaging.messages.RemotingMessage">

     <destination id="myservice">//需要对应pyAMF服务器上设定的destination ,必须一致

         <channels><channel ref="ananasChannel"/></channels> //对应下面定义的Channel

                <properties><source>*</source></properties>

       </destination>

      </service>

    </services>

    <channels>

       <channel-definition id="ananasChannel" class="mx.messaging.channels.AMFChannel">

            <endpoint uri="http://192.168.28.97/pysite/hello/gateway/" class="flex.messaging.endpoints.AMFEndpoint"/> //设置服务器终端URL地址

        </channel-definition>

    </channels>

</services-config>

RemoteObject的介绍:

 

一个简单的使用:

FlexWebService

u  WSDLWeb Service Description LanguageWeb服务器描述语言是用XML文档来描述Web服务的标准,是Web服务的接口定义语言,通过WSDL,可描述Web服务的三个基本属性:

              ·服务做些什么——服务所提供的操作(方法)

              ·如何访问服务——和服务交互的数据格式以及必要协议

              ·服务位于何处——协议相关的地址,如URL

u  Flex本身就拥有支持WebService的类, 常用的是: WebService,该类已经可以实现对服务端提供的WebServiceWSDL数据进行相应的操作.

FlexWebService

       Flex framework 包含mx.rpc.soap.WebService,该类可调用web services方法,首先创建WebService

       对象,如下:

var webService:WebService = new WebService( );

       每个web service都有一个Web服务描述语言(WSDL),通过WebService对象的wsdl属性进行定位:

webService.wsdl = "http://www.rightactionscript.com/webservices/FlashSurvey.php?wsdl";

      

       在调用方法之前,必须先用loadWSDL( ) 方法读取wsdl数据:

webService.loadWSDL( );

       loadWSDL( ) 方法是异步调用的,因此需要监听是否WSDL数据已经读取完毕,当数据读取完成

       WebService 对象会发出mx.rpc.soap.LoadEvent 事件,如:

webService.addEventListener(LoadEvent.LOAD, onWSDL);

       WSDL数据读取后,就可以调用WebService对象方法了,WSDL URL 指向真实的web service ,其有个方法叫getAverages( )

webService.getAverages( );

FlexWebService

处理返回结果

       Web services 方法的类型实际上是mx.rpc.soap.Operation,当web services 方法返回值时,方法对象会发出mx.rpc.events.ResultEvent 事件,要想处理这个事件可注册监听器,例如,webService有个方法叫getAverages( ),可这样注册监听器:

webService.getAverages.addEventListener(ResultEvent.RESULT, onGetAverages);

       调用写法和其他方法一样:

webService.getAverages( );

       当进入处理函数时,会传进来一个ResultEvent 参数,ResultEvent 类定义了一个叫result 的属性,它包含返回值,因为getAverages( ) 方法返回一个关联数组,包含两个属性:flash actionscript

private function onGetAverages(event:ResultEvent):void {

       textArea.text = "The averages for Flash and ActionScript are " +

              event.result.flash + " and " + event.result.actionscript;

}

 

处理异常

       web services 引发异常时,方法会发出fault事件,类型为mx.rpc.events.FaultEvent,下面的代码注册了fault 事件处理函数:

webService.addEventListener(FaultEvent.FAULT, onWebServiceFault);

       FaultEvent 类定义了一个fault属性,类型为mx.rpc.Fault. Fault 对象返回有关异常的信息,包含如faultCode, faultDetail, faultString, rootCause 属性,下面的例子用Alert 显示异常信息:

private onWebServiceFault(event:FaultEvent):void {

var fault:Fault = FaultEvent.fault;

var message:String = "An error occurred. The details are as follows/ncode: " + fault.faultCode;

message += "/ndetail: " + faul.faultDetail;

Alert.show("Web Service Error", message);

}

 

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

dengxingbo

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值