解析Flex与.NET互操作中基于WebService的数据访问

开发 后端
本文以.NET平台下C#语言开发的WebService作为远程数据源,详细介绍Flex与.NET的WebService的数据通信知识点;包括连接WebService,远程调用WebService方法,给WebService方法传递参数等相关知识点。

在学习Flex的过程中,你或许会遇到Flex与.NET互操作:基于WebService的数据访问问题,这里和大家分享一下Flex与.NET的WebService的数据通信知识点。

Flex与.NET互操作:基于WebService的数据访问

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

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

连接WebService

首先看看如下代码块:
 

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

 wsdl属性指定到要访问的WebService的wsdl地址既可,其中定义了两个操作标签(<mx:operation>),分别对应于WebService中定义的WebMethod方法。

result属性标记访问WebService方法成功后的处理函数;fault则相反,指定于访问失败的处理函数。以上两个<mx:operation>对应于WebService的WebMethod方法如下:
 

  1. 1///<summary> 
  2. 2///返回字符串  
  3. 3///</summary> 
  4. 4///<returns></returns> 
  5. 5[WebMethod]  
  6. 6publicstringHelloWorld()  
  7. 7{  
  8. 8return"HelloWorld";  
  9. 9}  
  10. 10  
  11. 11///<summary> 
  12. 12///返回一个简单对象  
  13. 13///</summary> 
  14. 14///<returns></returns> 
  15. 15[WebMethod]  
  16. 16publicBookGetBook()  
  17. 17{  
  18. 18returnnewBook  
  19. 19{  
  20. 20Id=1,  
  21. 21Name="三国演义",  
  22. 22Author="罗贯中",  
  23. 23Price=100 
  24. 24};  
  25. 25}  

 #p#
调用WebService所定义方法

完整流程,下面我们来看看在Flex的客户端怎么去调用WebService所定义的方法:
 

  1. 1<mx:Script> 
  2. 2<![CDATA[  
  3. 3importmx.controls.Alert;  
  4. 4importmx.rpc.events.FaultEvent;  
  5. 5importmx.rpc.events.ResultEvent;  
  6. 6  
  7. 7/**  
  8. 8*向WebService发起请求--调用HelloWorld方法,dataService为<mx:WebService>的id  
  9. 9**/  
  10. 10internalfunctiononRequest():void  
  11. 11{  
  12. 12dataService.HelloWorld();  
  13. 13}  
  14. 14  
  15. 15/**  
  16. 16*请求成功处理返回结果  
  17. 17**/  
  18. 18internalfunctiononSuccess(evt:ResultEvent):void  
  19. 19{  
  20. 20Alert.show(evt.result.toString());  
  21. 21}  
  22. 22  
  23. 23  
  24. 24/**  
  25. 25*请求失败的处理函数  
  26. 26**/  
  27. 27internalfunctiononFault(evt:FaultEvent):void  
  28. 28{  
  29. 29Alert.show("访问WebService失败!");  
  30. 30}  
  31. 31]]> 
  32. 32</mx:Script> 

 #p#给WebService方法传递参数

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

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

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

  1. 1<mx:operationnamemx:operationname="ConvertToUpper"result="onSuccess(event)"fault="onFault(event)"/> 
  2. 1/**  
  3. 2*向WebService发起请求  
  4. 3**/  
  5. 4internalfunctiononRequest():void  
  6. 5{  
  7. 6//dataService.HelloWorld();  
  8. 7dataService.ConvertToUpper("abcdefg");  
  9. 8} 

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

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

  1. 1internalfunctiononObject():void  
  2. 2{  
  3. 3dataService.GetBook();  
  4. 4}  
  5. 5  
  6. 6internalfunctiononObjectSuccess(evt:ResultEvent):void  
  7. 7{  
  8. 8//直接通过事件的result属性得到返回值,然后直接访问属性便OK  
  9. 9Alert.show(evt.result.Name);  
  10. 10}  
  11. 11  
  12. 12/**  
  13. 13*请求失败的处理函数  
  14. 14**/  
  15. 15internalfunctiononFault(evt:FaultEvent):void  
  16. 16{  
  17. 17Alert.show("访问WebService失败!");  
  18. 18}如上便完成了服务端的WebService返回对象到客户端的调用。  

【编辑推荐】

  1. Flex调用Webservice实现天气预报
  2. 解析Flex渲染器的使用
  3. 全面认识Flex应用程序的六大元素
  4. 揭开Flex正则表达式的神秘面纱
  5. Flex数据绑定及其使用频繁的几种情况 

 

责任编辑:佚名 来源: it168.com
相关推荐

2009-12-24 10:37:03

ADO.NET访问数据

2010-08-09 15:09:27

Flex数据访问

2010-08-11 13:01:09

Flex.NETSocket

2009-10-26 09:04:08

Java和.NET互操Web Service

2009-09-01 15:24:59

C++、C#和JAVA

2009-09-07 15:25:24

MySQL数据库互操作Silverlight

2010-04-22 10:26:16

.NET互操作

2009-08-27 17:54:13

C#与Flex

2010-08-10 10:56:39

2010-07-30 09:16:24

Flex数据绑定

2010-08-03 14:24:37

Flex与java集成

2009-09-07 13:25:56

Silverlight

2010-07-05 10:44:35

SQL Server数

2010-07-28 14:11:49

Flexasp.net

2010-07-30 14:26:21

FlexFlash

2011-05-20 16:33:47

委托接口

2010-08-13 15:08:55

Flex数据访问

2009-08-03 14:36:08

c#组件

2010-08-13 09:11:11

LabelFlex

2010-08-06 10:03:42

Flex事件
点赞
收藏

51CTO技术栈公众号