在学习Flex的过程中,你或许会遇到Flex与.NET互操作:基于WebService的数据访问问题,这里和大家分享一下Flex与.NET的WebService的数据通信知识点。
Flex与.NET互操作:基于WebService的数据访问
Flex提供了<mx:WebService>、<mx:HTTPService>和<mx:RemoteObject>标签来直接访问远程数据,这用于与各种不同语言环境开发提供的远程服务端数据源(如WebService)进行数据交互通信显得更加容易.
本文以.NET平台下C#语言开发的WebService作为远程数据源,详细介绍Flex与.NET的WebService的数据通信知识点;包括连接WebService,远程调用WebService方法,给WebService方法传递参数等相关知识点。三个标签的使用方法基本上是一样,这里就以<mx:WebService>标签为例进行介绍。
连接WebService
首先看看如下代码块:
- 1<mx:WebServiceidmx:WebServiceid="dataService"
- 2wsdl="http://localhost/FlashFlex/DataWebService.asmx?wsdl"
- 3useProxy="false">
- 4<mx:operationnamemx:operationname="HelloWorld"result="onSuccess(event)"fault="onFault(event)"/>
- 5<mx:operationnamemx:operationname="GetBook"fault="onFault(event)"result="onObjectSuccess(event)"/>
- 6</mx:WebService>
wsdl属性指定到要访问的WebService的wsdl地址既可,其中定义了两个操作标签(<mx:operation>),分别对应于WebService中定义的WebMethod方法。
result属性标记访问WebService方法成功后的处理函数;fault则相反,指定于访问失败的处理函数。以上两个<mx:operation>对应于WebService的WebMethod方法如下:
- 1///<summary>
- 2///返回字符串
- 3///</summary>
- 4///<returns></returns>
- 5[WebMethod]
- 6publicstringHelloWorld()
- 7{
- 8return"HelloWorld";
- 9}
- 10
- 11///<summary>
- 12///返回一个简单对象
- 13///</summary>
- 14///<returns></returns>
- 15[WebMethod]
- 16publicBookGetBook()
- 17{
- 18returnnewBook
- 19{
- 20Id=1,
- 21Name="三国演义",
- 22Author="罗贯中",
- 23Price=100
- 24};
- 25}
#p#
调用WebService所定义方法
完整流程,下面我们来看看在Flex的客户端怎么去调用WebService所定义的方法:
- 1<mx:Script>
- 2<![CDATA[
- 3importmx.controls.Alert;
- 4importmx.rpc.events.FaultEvent;
- 5importmx.rpc.events.ResultEvent;
- 6
- 7/**
- 8*向WebService发起请求--调用HelloWorld方法,dataService为<mx:WebService>的id
- 9**/
- 10internalfunctiononRequest():void
- 11{
- 12dataService.HelloWorld();
- 13}
- 14
- 15/**
- 16*请求成功处理返回结果
- 17**/
- 18internalfunctiononSuccess(evt:ResultEvent):void
- 19{
- 20Alert.show(evt.result.toString());
- 21}
- 22
- 23
- 24/**
- 25*请求失败的处理函数
- 26**/
- 27internalfunctiononFault(evt:FaultEvent):void
- 28{
- 29Alert.show("访问WebService失败!");
- 30}
- 31]]>
- 32</mx:Script>
#p#给WebService方法传递参数
通过上面的调用,就可以完成一个Flex和.NETWebService的交互。当然我们在Flash/Flex的客户端调用WebService也是可以传递参数的,如下WebService的WebMethod定义:
- 1///<summary>
- 2///将传递进来的参数转化为大写字符返回
- 3///</summary>
- 4///<paramnameparamname="value"></param>
- 5///<returns></returns>
- 6[WebMethod]
- 7publicstringConvertToUpper(stringvalue)
- 8{
- 9returnvalue.ToUpper();
- 10}
◆通过在<mx:WebService>标签下配置<mx:operation>执行该方法就可以访问了,如下:
- 1<mx:operationnamemx:operationname="ConvertToUpper"result="onSuccess(event)"fault="onFault(event)"/>
- 1/**
- 2*向WebService发起请求
- 3**/
- 4internalfunctiononRequest():void
- 5{
- 6//dataService.HelloWorld();
- 7dataService.ConvertToUpper("abcdefg");
- 8}
另外,我们还可以通过<mx:request>来传递参数,这里只需要知道<mx:request></mx:request>里的参数配置与WebService提供的WebMethod方法参数同名就OK。
回到前面看看WebService的方法定义,其中一个方法GetBook是返回的一个Book对象,如果是返回的对象我们在Flex的客户端怎么来获取这个对象的值呢?详细见如下代码示例:
- 1internalfunctiononObject():void
- 2{
- 3dataService.GetBook();
- 4}
- 5
- 6internalfunctiononObjectSuccess(evt:ResultEvent):void
- 7{
- 8//直接通过事件的result属性得到返回值,然后直接访问属性便OK
- 9Alert.show(evt.result.Name);
- 10}
- 11
- 12/**
- 13*请求失败的处理函数
- 14**/
- 15internalfunctiononFault(evt:FaultEvent):void
- 16{
- 17Alert.show("访问WebService失败!");
- 18}如上便完成了服务端的WebService返回对象到客户端的调用。
【编辑推荐】