flex提供了<mx:webservice>、<mx:httpservice>和<mx:remoteobject>标签来直接访问远程数据,这用于与各种不同语言环境开发提供的远程服务端数据源(如webservice)进行数据交互通信显得更加容易.
本文以.net平台下c#语言开发的webservice作为远程数据源,详细介绍flex与.net的webservice的数据通信知识点;包括连接webservice,远程调用webservice方法,给webservice方法传递参数等相关知识点。三个标签的使用方法基本上是一样,这里就以<mx:webservice>标签为例进行介绍。
首先看看如下代码块:
<!--<br /><br />code highlighting produced by actipro codehighlighter (freeware)<br />http://www.codehighlighter.com/<br /><br />-->1<mx:webserviceid="dataservice"
2wsdl="http://localhost/flashflex/datawebservice.asmx?wsdl"
3useproxy="false">
4<mx:operationname="helloworld"result="onsuccess(event)"fault="onfault(event)"/>
5<mx: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方法如下:
<!--<br /><br />code highlighting produced by actipro codehighlighter (freeware)<br />http://www.codehighlighter.com/<br /><br />-->1///<summary>
2///返回字符串
3///</summary>
4///<returns></returns>
5[webmethod]
6publicstringhelloworld()
7{
8returnhelloworld;
9}
10
11///<summary>
12///返回一个简单对象
13///</summary>
14///<returns></returns>
15[webmethod]
16publicbookgetbook()
17{
18returnnewbook
19{
20id=1,
21name=三国演义,
22author=罗贯中,
23price=100
24};
25}
如上便是webservice方法定义和在flex的客户端(mxml)通过<mx:webservice>标签来访问webservice的完整流程,下面我们来看看在flex的客户端怎么去调用webservice所定义的方法:
<!--<br /><br />code highlighting produced by actipro codehighlighter (freeware)<br />http://www.codehighlighter.com/<br /><br />-->1<mx:script>
2
32</mx:script>
通过上面的调用,就可以完成一个flex和.net webservice的交互。当然我们在flash/flex的客户端调用webservice也是可以传递参数的,如下webservice的webmethod定义:
<!--<br /><br />code highlighting produced by actipro codehighlighter (freeware)<br />http://www.codehighlighter.com/<br /><br />-->1///<summary>
2///将传递进来的参数转化为大写字符返回
3///</summary>
4///<paramname="value"></param>
5///<returns></returns>
6[webmethod]
7publicstringconverttoupper(stringvalue)
8{
9returnvalue.toupper();
10}
通过在<mx:webservice>标签下配置<mx:operation>执行该方法就可以访问了,如下:
<!--<br /><br />code highlighting produced by actipro codehighlighter (freeware)<br />http://www.codehighlighter.com/<br /><br />-->1<mx:operationname="converttoupper"result="onsuccess(event)"fault="onfault(event)"/>
<!--<br /><br />code highlighting produced by actipro codehighlighter (freeware)<br />http://www.codehighlighter.com/<br /><br />-->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的客户端怎么来获取这个对象的值呢?详细见如下代码示例:
<!--<br /><br />code highlighting produced by actipro codehighlighter (freeware)<br />http://www.codehighlighter.com/<br /><br />-->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}