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