Flex提供了<mx:WebService>、<mx:HTTPService>和<mx:RemoteObject>标签来直接访问远程数据,这用于与各种不同语言环境开发提供的远程服务端数据源(如WebService)进行数据交互通信显得更加容易.
本文以.NET平台下C#语言开发的WebService作为远程数据源,详细介绍Flex与.NET的WebService的数据通信知识点;包括连接WebService,远程调用WebService方法,给WebService方法传递参数等相关知识点。三个标签的使用方法基本上是一样,这里就以<mx:WebService>标签为例进行介绍。
首先看看如下代码块:
wsdl属性指定到要访问的WebService的wsdl地址既可,其中定义了两个操作标签(<mx:operation>),分别对应于WebService中定义的WebMethod方法。result属性标记访问WebService方法成功后的处理函数;fault则相反,指定于访问失败的处理函数。以上两个<mx:operation>对应于WebService的WebMethod方法如下:
如上便是WebService方法定义和在Flex的客户端(mxml)通过<mx:WebService>标签来访问WebService的完整流程,下面我们来看看在Flex的客户端怎么去调用WebService所定义的方法:
通过上面的调用,就可以完成一个Flex和.NET WebService的交互。当然我们在Flash/Flex的客户端调用WebService也是可以传递参数的,如下WebService的WebMethod定义:
通过在<mx:WebService>标签下配置<mx:operation>执行该方法就可以访问了,如下:
另外,我们还可以通过<mx:request>来传递参数,这里只需要知道<mx:request></mx:request>里的参数配置与WebService提供的WebMethod方法参数同名就OK。
回到前面看看WebService的方法定义,其中一个方法GetBook是返回的一个Book对象,如果是返回的对象我们在Flex的客户端怎么来获取这个对象的值呢?详细见如下代码示例:
如上便完成了服务端的WebService返回对象到客户端的调用。
=====================================================================================
以下是demo.mxml代码:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:WebService id="dataService" wsdl="http://localhost:3035/WebService1.asmx?wsdl"
useProxy="false">
<mx:operation name="HelloWorld" result="onSuccess(event)"
fault="onFault(event)">
</mx:operation>
<mx:operation name="GetBook" fault="onFault(event)"
result="onObjectSuccess(event)"/>
</mx:WebService>
<mx:Script>
<![CDATA[
import mx.rpc.Fault;
import mx.controls.Alert;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
internal function onRequest():void
{
dataService.HelloWorld(); }
internal function onSuccess(evt:ResultEvent):void
{
Alert.show(evt.result.toString());
}
internal function onFault(evt:FaultEvent):void
{
Alert.show("访问WebService失败!");
}
internal function onObject():void
{
dataService.GetBook();
}
internal function onObjectSuccess(evt:ResultEvent):void
{
Alert.show(evt.result.Name);
}
]]>
</mx:Script>
<mx:Button id="btnHello" label="CALLHELLO" click="onRequest()" x="142" y="137"></mx:Button>
<mx:Button x="289" y="135" label="GETBOOK" fontSize="12" click="onObject()"/>
</mx:Application>
注:前台中webService的地址与端口要根据vs2008运行时的那个地址定,并且在运行fb3中的mxml时,vs2008的这个网站要处于运行状态,webService才可以用