在上一篇文章《Flex与.NET互操作(二):基于WebService的数据访问(上) 》中介绍了通过<mx:WebService>标签来访问Webservice。实际上我们也可以通过编程的方式动态的访问WebService,Flex SDK为我们提供了WebService类。

使用WebService类来访问WebService其实也就是将<mx:WebService>标签的属性通过类对象的属性形式来表示,相比之下使用WebService类比使用<mx:WebService>标签要灵活。下面我们来看看编程方式怎么连接和调用远程方法:

1     internalfunction onClick():void2 {3 var service:WebService =newWebService();4 service.loadWSDL("http://localhost:1146/FlashFlexService.asmx?wsdl");5 service.addEventListener(ResultEvent.RESULT,onResult);6 service.addEventListener(FaultEvent.FAULT,onFault);7 service.GetBook();8 }

直接通过类对象的loadWSDL()方法调用远程WebService,动态为类对象指定相关的处理函数,然后和标签一样调用远程WebService方法既可。

1     internalfunction onResult(evt:ResultEvent):void2 {3 Alert.show(evt.result.Id);4 }5 6 internalfunction onFault(evt:FaultEvent):void7 {8 Alert.show(evt.fault.faultDetail.toString());9 }

如上便完成了使用WebService类通过编程的方式访问远程WebService方法的调用。

下面来看看WebService返回DataTable等负责类型,在Flex客户端该怎么解析。首先定义WebService方法如下:

1 [WebMethod(Description="该方法将返回DataTable类型的数据")]2 publicDataTable GetDataTable()3 {4 DataTable dt =newDataTable("Books");5 dt.Columns.Add("Id", typeof(int));6 dt.Columns.Add("Name", typeof(string));7 dt.Columns.Add("Author", typeof(string));8 dt.Columns.Add("Price", typeof(double));9 10 DataRow dr =dt.NewRow();11 dr["Id"] =1;12 dr["Name"] ="《Flex游戏开发》";13 dr["Author"] ="张三";14 dr["Price"] =54.85;15 dt.Rows.Add(dr);16 17 dr =dt.NewRow();18 dr["Id"] =2;19 dr["Name"] ="《Flash游戏开发》";20 dr["Author"] ="李四";21 dr["Price"] =65.50;22 dt.Rows.Add(dr);23 24 returndt;25 }

同样在Flex客户端通过WebService来访问就可以了,下面是使用<mx:WebServive>标签访问(这里需要注意,<mx:operation>标签的name必须与服务端的WebService方法同名):

1 <mx:WebService id="myService"2 wsdl="http://localhost:1146/DataWebService.asmx?wsdl"useProxy="false">3 <mx:operation name="GetDataTable">4 </mx:operation>5 </mx:WebService>

提供好了WebService,客户端也连接上了WebService,现在只差调用WebService提供的远程方法了。如下:

1     internalfunction onTable():void2 {3 myService.addEventListener(ResultEvent.RESULT,onSuccess);4 myService.addEventListener(FaultEvent.FAULT,onFault);5 myService.GetDataTable.send();6 }7 8 internalfunction onSuccess(evt:ResultEvent):void9 {10 //bookGrid.dataProvider=this.myService.GetDataTable.lastResult.Tables.Books.Rows;11 }12 13 internalfunction onFault(evt:FaultEvent):void14 {15 Alert.show("调用WebService方法失败,详细:"+evt.fault.faultDetail.toString());16 17 }

将WebService的返回值绑定在Flex的DataGrid组件,mxml的相关代码如下:

1 <mx:Panel x="41"y="123"width="480"height="279"layout="absolute"fontSize="12">2 <mx:DataGrid x="10"y="10"width="436"id="bookGrid"3 dataProvider="{this.myService.GetDataTable.lastResult.Tables.Books.Rows}">4 <mx:columns>5 <mx:DataGridColumn headerText="编号"dataField="Id"/>6 <mx:DataGridColumn headerText="书名"dataField="Name"/>7 <mx:DataGridColumn headerText="作者"dataField="Author"/>8 <mx:DataGridColumn headerText="价格"dataField="Price"/>9 </mx:columns>10 </mx:DataGrid>11 <mx:ControlBar>12 <mx:Button label="DataTable"click="onTable()"/>13 </mx:ControlBar>14 </mx:Panel>

通过DataGrid的dataProvider属性绑定DataGrid组件的数据源,除了直接通过"{}"绑定表达式帮定外我们也可以在调用远程方法成功的处理函数里给DataGrid指定数据源,见上面代码中注释的代码部分。{this.myService.GetDataTable.lastResult.Tables.Books.Rows}表示将远程WebService方法GetDataTable()的返回结果(DataTable)的所有行作为数据源与DataGrid组件进绑定,其中Books为数据源DataTable的name,详细见前面WebService方法的定义出。程序运行结果如下图:

DataSet,DataTable相比泛型集合来说,性能上有很大的差距,复杂的序列化和反序列化过程也很负责,自从.net 2.0推出泛型到现在,我一直就比较喜欢用泛型来传递大数据。OK,下面我将介绍下在Flex中怎么去处理WebService方法返回的泛型集合数据。我们有如下WebService方法定义:

1     [WebMethod(Description="该方法返回泛型集合")]2 publicList<Book>BookList()3 {4 returnnewList<Book>5 {6 newBook7 {8 Id =1,9 Name ="《Flex游戏开发》",10 Author ="张三",11 Price =54.8512 },13 newBook14 {15 Id =1,16 Name ="《Flash游戏开发》",17 Author ="李四",18 Price =65.5019 }20 };21 }

相比DataSet,DataTable类型,使用List<>返回数据我个人认为更方面容易处理。我们直接在WebService的调试环境下测试返回List<>的WebService方法可以看到如下结果:

 

这就是以泛型结合(List<>)的形式返回的数据形式,相比DataTable的返回结果更为简洁,明了。话说到此,我们在Flex下该怎么去获取这个返回值和处理这个值呢?其实这里已经很清楚的展现了我们可以通过什么方式去处理,仔细看上图会发现"ArrayOfBook"????这是什么东西?莫非是在客户端可以通过数组的形式得到这个返回值。为了进一步搞清楚这里面的的点点滴滴,我们需要深入到内部去了解下返回值的具体构造,通过Flex Builder的调试环境可以得到如下信息:

看清楚了吗?BookList方法的lastResult结构集下有两个对象,点开节点可知正是我们通过List<Book>返回的两个Book对象,而lastResult的类型是:mx.collections.ArrayCollection,这不真是ActionScript中的数组集合吗?好的,既然这样,在Flex客户端便可以直接通过lastResult得到WebService返回的泛型集合数据了。如下代码块:

1 internalfunction onTable():void2 {3 myService.addEventListener(ResultEvent.RESULT,onSuccess);4 myService.addEventListener(FaultEvent.FAULT,onFault);5 myService.BookList.send();6 }7 8 internalfunction onSuccess(evt:ResultEvent):void9 {10 var arrC:ArrayCollection =this.myService.BookList.lastResult asArrayCollection;11 bookGrid.dataProvider=arrC;12 }13 14 internalfunction onFault(evt:FaultEvent):void15 {16 Alert.show("调用WebService方法失败,详细:"+evt.fault.faultDetail.toString());17 18 }

对应的mxml代码如下(运行结果和上面返回DataTable类型一样):

1 <mx:Panel x="41"y="123"width="480"height="279"layout="absolute"fontSize="12">2 <mx:DataGrid x="10"y="10"width="436"id="bookGrid">3 <mx:columns>4 <mx:DataGridColumn headerText="编号"dataField="Id"/>5 <mx:DataGridColumn headerText="书名"dataField="Name"/>6 <mx:DataGridColumn headerText="作者"dataField="Author"/>7 <mx:DataGridColumn headerText="价格"dataField="Price"/>8 </mx:columns>9 </mx:DataGrid>10 <mx:ControlBar>11 <mx:Button label="DataTable"click="onTable()"/>12 </mx:ControlBar>13 </mx:Panel>

关于WebService的数据访问就介绍到这里,由于个人能力有限,文中有不足之处还望大家指正。如果有什么好的建议也可以提出,大家相互讨论,学习,共同进步!!

版权说明

本文属原创文章,欢迎转载,其版权归作者和博客园共有。

作      者:Beniao

文章出处:http://www.cnblogs.com/

Flex与.NET互操作(三):基于WebService的数据访问(下)相关推荐

  1. [转]Flex与.NET互操作(三):基于WebService的数据访问(下)

    转自:http://blog.csdn.net/beniao277/archive/2009/01/19/3837605.aspx 在上一篇文章<Flex与.NET互操作(二):基于WebSer ...

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

    Flex提供了<mx:WebService>.<mx:HTTPService>和<mx:RemoteObject>标签来直接访问远程数据,这用于与各种不同语言环境开 ...

  3. html webservice数据交互_一种基于WebService的数据交换方法

    一种基于WebService的数据交换方法 [专利摘要]本发明涉及数据交换[技术领域],特别涉及一种基于WebService的数据交换方法.本发明是以Web服务为依托,通过定义参数的方式进行传入内容和 ...

  4. Web网络编程第三次试验:数据访问

    Web网络编程第三次试验:数据访问 前言 一.实验目的 二.实验环境 三.实验内容 四.代码及截图 五.实验总结 前言 为了帮助同学们完成痛苦的实验课程设计,本作者将其作出的实验结果及代码贴至CSDN ...

  5. 企业级应用架构(三)三层架构之数据访问层的改进以及测试DOM的发布

    在上一篇我们在宏观概要上对DAL层进行了封装与抽象.我们的目的主要有两个:第一,解除BLL层对DAL层的依赖,这一点我们通过定义接口做到了:第二,使我们的DAL层能够支持一切数据访问技术,如Ado.n ...

  6. mysql ormlite_GitHub - loogn/Loogn.OrmLite: Loogn.OrmLite是一个简单、高效的基于.NET的数据访问组件!...

    简要 Loogn.OrmLite是一个超简单.超高效.超灵活的基于.net standard 2.0的数据访问组件! 特点 支持sqlserver.mysql.sqlite3数据库: 通过扩展方法扩展 ...

  7. Flex与.NET互操作系列文章

    本系列文章主要介绍了关于Flex与.NET结合开发中的一些互操作性,包括网络通信.数据加载.数据传输.文件传输.以及应用于Flex与.NET协作开发的通信网关开源项目FluorineFx的相关知识点. ...

  8. Flex与.NET互操作系列文章索引

    本系列文章主要介绍了关于Flex与.NET结合开发中的一些互操作性,包括网络通信.数据加载.数据传输.文件传输.以及应用于Flex与.NET协作开发的通信网关开源项目FluorineFx的相关知识点. ...

  9. ASP.NET Core 实战:基于 Dapper 扩展你的数据访问方法

    ASP.NET Core 实战:基于 Dapper 扩展你的数据访问方法 一.前言 在非静态页面的项目开发中,必定会涉及到对于数据库的访问,最开始呢,我们使用 Ado.Net,通过编写 SQL 帮助类 ...

最新文章

  1. Java 基础 之 常量
  2. 关系型数据库和mysql教材_关系型数据库(MySQL)
  3. 在中国,有这样一些村落
  4. 友友球捕获率_神奇宝贝球内部秘密公开!大师球原来是这样达到100%捕获率的...
  5. Java故障定位方法总结
  6. daemon守护进程初识
  7. [转载]下载网页中的ts视频文件
  8. ubuntu 16.04安装显卡驱动
  9. 斐讯N1救砖指南!值得收藏
  10. 【密码学原理】密钥管理和分发——对称密钥分发
  11. 如何通过AWS VPC Peering云服务,解决公共云的局限性?
  12. python 构建和解析邮件
  13. asp.net 面试题目
  14. 实用:最经济的美容偏方大汇集
  15. matlab用switch画出分段函数,matlab用switch语句绘出分段函数 在 的图像
  16. BOOST电路的节点电压和电流分析
  17. 计算机网络实验路由器配置
  18. 当AI音箱成为未来生活入场券,百度用上亿补贴帮助全民“上车”
  19. Flutter如何使widget始终保持在屏幕底部
  20. 上海python招聘微信群_Python之微信-微信群发

热门文章

  1. C++实现计数排序(附完整源码)
  2. C++ Opengl图形颜色源码
  3. 计算机统计字符数,如何在Word中统计相同字符(文字)出现的个数 -电脑资料
  4. php手机接口购物车怎么实现,php购物车的实现原理
  5. java equals比较_Java中equals()和==的比较
  6. Mycat关键特性,什么是MYCAT,MYCAT监控,版本架构,长期规划2.0,Mycat高可用方案
  7. Strom程序的并发机制,配置并行度(代码实现)、动态改变并行度,local or shuffle分组,分组的概念以及分组类型
  8. PCB task_struct 数据结构 (转:http://blog.csdn.net/jurrah/article/details/3965437)
  9. Android-使用AIDL进程间通信
  10. mariadb CTE示例