Flex与.NET互操作:基于WebService…

来源:互联网 发布:遗传算法的基本流程图 编辑:程序博客网 时间:2024/06/05 08:34

Flex提供了<mx:WebService>、<mx:HTTPService>和<mx:RemoteObject>标签来直接访问远程数据,这用于与各种不同语言环境开发提供的远程服务端数据源(如WebService)进行数据交互通信显得更加容易.

本文以.NET平台下C#语言开发的WebService作为远程数据源,详细介绍Flex与.NET的WebService的数据通信知识点;包括连接WebService,远程调用WebService方法,给WebService方法传递参数等相关知识点。三个标签的使用方法基本上是一样,这里就以<mx:WebService>标签为例进行介绍。

首先看看如下代码块:

   <mx:WebService id="dataService"
       wsdl="http://localhost/FlashFlex/DataWebService.asmx?wsdl"
       useProxy="false">
       <mx:operation name="HelloWorld"result="onSuccess(event)"fault="onFault(event)"/>
       <mx:operation name="GetBook" fault="onFault(event)"result="onObjectSuccess(event)"/>
   </mx:WebService>
 

    wsdl属性指定到要访问的WebService的wsdl地址既可,其中定义了两个操作标签(<mx:operation>),分别对应于WebService中定义的WebMethod方法。result属性标记访问WebService方法成功后的处理函数;fault则相反,指定于访问失败的处理函数。以上两个<mx:operation>对应于WebService的WebMethod方法如下:

    /// <summary>
    /// 返回字符串
    /// </summary>
    ///<returns></returns>
    [WebMethod]
    public string HelloWorld()
    {
        return "Hello World";
    }
10
11    /// <summary>
12    /// 返回一个简单对象
13    /// </summary>
14    ///<returns></returns>
15    [WebMethod]
16    public Book GetBook()
17    {
18        return new Book
19        {
20            Id = 1,
21            Name = "三国演义",
22            Author = "罗贯中",
23            Price = 100
24        };
25    }
 

如上便是WebService方法定义和在Flex的客户端(mxml)通过<mx:WebService>标签来访问WebService的完整流程,下面我们来看看在Flex的客户端怎么去调用WebService所定义的方法:

 1<mx:Script>
    <![CDATA[
        import mx.controls.Alert;
        import mx.rpc.events.FaultEvent;
        import mx.rpc.events.ResultEvent;
        
        
10        internal function onRequest():void
11        {
12            dataService.HelloWorld();
13        }
14        
15        
18        internal function onSuccess(evt:ResultEvent):void
19        {
20            Alert.show(evt.result.toString());
21        }
22        
23        
24        
27        internal function onFault(evt:FaultEvent):void
28        {
29            Alert.show("访问WebService失败!");
30        }
31    ]]>
32 </mx:Script>
 
通过上面的调用,就可以完成一个Flex和.NETWebService的交互。当然我们在Flash/Flex的客户端调用WebService也是可以传递参数的,如下WebService的WebMethod定义:

    /// <summary>
    /// 将传递进来的参数转化为大写字符返回
    /// </summary>
    /// <paramname="value"></param>
    ///<returns></returns>
    [WebMethod]
    public string ConvertToUpper(string value)
    {
        return value.ToUpper();
10    }
 
通过在<mx:WebService>标签下配置<mx:operation>执行该方法就可以访问了,如下:

1 <mx:operationname="ConvertToUpper"  result="onSuccess(event)"fault="onFault(event)"/>
 

   
   internal function onRequest():void
   {
       //dataService.HelloWorld();
       dataService.ConvertToUpper("abcdefg");
   }

另外,我们还可以通过<mx:request>来传递参数,这里只需要知道<mx:request></mx:request>里的参数配置与WebService提供的WebMethod方法参数同名就OK。

回到前面看看WebService的方法定义,其中一个方法GetBook是返回的一个Book对象,如果是返回的对象我们在Flex的客户端怎么来获取这个对象的值呢?详细见如下代码示例:

    internal function onObject():void
    {
        dataService.GetBook();
    }
    
    internal function onObjectSuccess(evt:ResultEvent):void
    {
        //直接通过事件的result属性得到返回值,然后直接访问属性便OK
        Alert.show(evt.result.Name);
10    }
11    
12    
15    internal function onFault(evt:FaultEvent):void
16    {
17        Alert.show("访问WebService失败!");
18    }
 
如上便完成了服务端的WebService返回对象到客户端的调用。

0 0
原创粉丝点击