| 
   本文以.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返回对象到客户端的调用。      |