Flex的数据通讯方式
" Flex本身并不支持直接与数据库交互,但可以通过间接的方式与数据交互,下面整理了几种方式:
第一种,WebService通讯
WebService提供对远程服务器上基于SOAP的Web服务的访问,具有通用性,需要设置两大块,一个是VS工具创建Web项目以添加Web服务,一个是设置Flex项目以访问Web服务并加以运用访问到的数据。
1、打开VS,在创建项目中选择Web的ProjectType,添加一个Web服务,项目名称及路径按自己的意愿填,创建好后默认的是个简单的例子----HelloWorld
[WebMethod]publicstringHelloWorld(){return""HelloWorld"";}
然后运行程序。
2、在Flex项目中要访问这个Web服务。
对于Flex中的WebService有两种,一种是MXML的,一种是AS,这个类分别在
mx.rpc.soap.mxml包和mx.rpc.soap包中。
MXML方式如:
<fx:Declarations><s:WebServiceid=""WS""wsdl=""http://localhost:2403/Service1.asmx?wsdl""fault=""WS_faultHandler(event);""showBusyCursor=""true""><s:operationname=""HelloWorld""resultFormat=""object""result=""operation1_resultHandler(event);""/></s:WebService></fx:Declarations>
然后在项目的主应用程序的creationComplete=""init();""中
privatefunctioninit():void{WS.HelloWorld.send();}
protectedfunctionWS_faultHandler(event:FaultEvent):void{Alert.show(event.fault.faultString,""Error"");}protectedfunctionoperation1_resultHandler(event:ResultEvent):void{varresult:String=event.resultasString;Alert.show(result);}
如此result结果是Web服务的返回值“HelloWorld”。
AS方式如下:
在项目的主应用程序的creationComplete=""init();""中
privatefunctioninit():void{varmyWS:mx.rpc.soap.WebService=newmx.rpc.soap.WebService();myWS.wsdl=""http://localhost:2403/Service1.asmx?wsdl"";myWS.loadWSDL();myWS.addEventListener(FaultEvent.FAULT,WS_faultHandler);myWS.addEventListener(ResultEvent.RESULT,operation1_resultHandler);myWS.HelloWorld();}
如此达到上面一样的效果。
其中wsdl是WebServicesDescriptionLanguage的缩写,是一个用来描述Web服务和说明如何与Web服务通信的XML语言,为用户提供详细的接口说明书,描述WebService的接口信息,比如介绍该Webservice有什么功能,以及每个函数调用时的参数等,wsdl便是这样的一个XML文档,如:
<?xmlversion=""1.0""encoding=""UTF-8""?>
<wsdl:definitionsxmlns:wsdl=""http://schemas.xmlsoap.org/wsdl/""targetNamespace=""http://tempuri.org/""xmlns:http=""http://schemas.xmlsoap.org/wsdl/http/""xmlns:soap12=""http://schemas.xmlsoap.org/wsdl/soap12/""xmlns:s=""http://www.w3.org/2001/XMLSchema""xmlns:tns=""http://tempuri.org/""xmlns:mime=""http://schemas.xmlsoap.org/wsdl/mime/""xmlns:soapenc=""http://schemas.xmlsoap.org/soap/encoding/""xmlns:tm=""http://microsoft.com/wsdl/mime/textMatching/""xmlns:soap=""http://schemas.xmlsoap.org/wsdl/soap/""><wsdl:types><s:schematargetNamespace=""http://tempuri.org/""elementFormDefault=""qualified""><s:elementname=""HelloWorld""><s:complexType/></s:element><s:elementname=""HelloWorldResponse""><s:complexType><s:sequence><s:elementname=""HelloWorldResult""type=""s:string""maxOccurs=""1""minOccurs=""0""/></s:sequence></s:complexType></s:element></s:schema></wsdl:types><wsdl:messagename=""HelloWorldSoapIn""><wsdl:partname=""parameters""element=""tns:HelloWorld""/></wsdl:message><wsdl:messagename=""HelloWorldSoapOut""><wsdl:partname=""parameters""element=""tns:HelloWorldResponse""/></wsdl:message><wsdl:portTypename=""Service1Soap""><wsdl:operationname=""HelloWorld""><wsdl:inputmessage=""tns:HelloWorldSoapIn""/><wsdl:outputmessage=""tns:HelloWorldSoapOut""/></wsdl:operation></wsdl:portType><wsdl:bindingname=""Service1Soap""type=""tns:Service1Soap""><soap:bindingtransport=""http://schemas.xmlsoap.org/soap/http""/><wsdl:operationname=""HelloWorld""><soap:operationstyle=""document""soapAction=""http://tempuri.org/HelloWorld""/><wsdl:input><soap:bodyuse=""literal""/></wsdl:input><wsdl:output><soap:bodyuse=""literal""/></wsdl:output></wsdl:operation></wsdl:binding><wsdl:bindingname=""Service1Soap12""type=""tns:Service1Soap""><soap12:bindingtransport=""http://schemas.xmlsoap.org/soap/http""/><wsdl:operationname=""HelloWorld""><soap12:operationstyle=""document""soapAction=""http://tempuri.org/HelloWorld""/><wsdl:input><soap12:bodyuse=""literal""/></wsdl:input><wsdl:output><soap12:bodyuse=""literal""/></wsdl:output></wsdl:operation></wsdl:binding><wsdl:servicename=""Service1""><wsdl:portname=""Service1Soap""binding=""tns:Service1Soap""><soap:addresslocation=""http://localhost:2403/Service1.asmx""/></wsdl:port><wsdl:portname=""Service1Soap12""binding=""tns:Service1Soap12""><soap12:addresslocation=""http://localhost:2403/Service1.asmx""/></wsdl:port></wsdl:service></wsdl:definitions>
然后myWS.loadWSDL();指示WebService下载WSDL文档以便监听器获取此XML文档以便获取想要的数据,myWS.HelloWorld();指定你要的操作(其实可以说从刚获取的XML文档中取这个操作名XML元素)"