职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 972|回复: 1

[转帖]Flex与.NET互操作(二):基于WebService的数据访问(上)

[复制链接]
蓝色梦幻 发表于 2009-3-5 09:11 | 显示全部楼层 |阅读模式
Flex提供了<mx:WebService>、<mx:HTTPService>和<mx:RemoteObject>标签来直接访问远程数据,这用于与各种不同语言环境开发提供的远程服务端数据源(如WebService)进行数据交互通信显得更加容易.

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

     首先看看如下代码块:

1     <mx:WebService id=\"dataService\"
2         wsdl=\"http://localhost/FlashFlex/DataWebService.asmx?wsdl\"
3         useProxy=\"false\">
4         <mxperation name=\"HelloWorld\" result=\"onSuccess(event)\" fault=\"onFault(event)\"/>
5         <mxperation name=\"GetBook\" fault=\"onFault(event)\" result=\"onObjectSuccess(event)\"/>
6     </mx:WebService>


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

1     /// <summary>
2     /// 返回字符串
3     /// </summary>
4     /// <returns></returns>
5     [WebMethod]
6     public string HelloWorld()
7     {
8         return \"Hello World\";
9     }
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>
2     <![CDATA[
3         import mx.controls.Alert;
4         import mx.rpc.events.FaultEvent;
5         import mx.rpc.events.ResultEvent;
6         
7         /**
8          * 向WebService发起请求--调用HelloWorld方法,dataService为<mx:WebService>的id
9          * */
10         internal function onRequest():void
11         {
12             dataService.HelloWorld();
13         }
14         
15         /**
16          * 请求成功处理返回结果
17          * */
18         internal function onSuccess(evt:ResultEvent):void
19         {
20             Alert.show(evt.result.toString());
21         }
22         
23         
24         /**
25          * 请求失败的处理函数
26          * */
27         internal function onFault(evt:FaultEvent):void
28         {
29             Alert.show(\"访问WebService失败!\");
30         }
31     ]]>
32 </mx:Script>


      通过上面的调用,就可以完成一个Flex和.NET WebService的交互。当然我们在Flash/Flex的客户端调用WebService也是可以传递参数的,如下WebService的WebMethod定义:

1     /// <summary>
2     /// 将传递进来的参数转化为大写字符返回
3     /// </summary>
4     /// <param name=\"value\"></param>
5     /// <returns></returns>
6     [WebMethod]
7     public string ConvertToUpper(string value)
8     {
9         return value.ToUpper();
10     }


     通过在<mx:WebService>标签下配置<mxperation>执行该方法就可以访问了,如下:

1 <mxperation name=\"ConvertToUpper\"  result=\"onSuccess(event)\" fault=\"onFault(event)\"/>


1     /**
2      * 向WebService发起请求
3      * */
4     internal function onRequest():void
5     {
6         //dataService.HelloWorld();
7         dataService.ConvertToUpper(\"abcdefg\");
8     }

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

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

1     internal function onObject():void
2     {
3         dataService.GetBook();
4     }
5     
6     internal function onObjectSuccess(evt:ResultEvent):void
7     {
8         //直接通过事件的result属性得到返回值,然后直接访问属性便OK
9         Alert.show(evt.result.Name);
10     }
11     
12     /**
13      * 请求失败的处理函数
14      * */
15     internal function onFault(evt:FaultEvent):void
16     {
17         Alert.show(\"访问WebService失败!\");
18     }
joe 发表于 2009-4-28 09:06 | 显示全部楼层
支持下。
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-5-5 18:38 , Processed in 0.114256 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表