手机版

基于网络服务的数据访问(二)Flex和 净(三)

时间:2021-10-26 来源:互联网 编辑:宝哥软件园 浏览:

使用服务类来访问服务其实也就是将MX :网络服务标签的属性通过类对象的属性形式来表示,相比之下使用服务类比使用MX :网络服务标签要灵活。下面我们来看看编程方式怎么连接和调用远程方法:1 internalfuncon click(): void 2 { 3 varservice3360 web service=new web service();4服务。load wsdl(' http://localhost :1146/FlashFlexServiCe。asmx?wsdl’);5服务。addeventlistener(结果事件.结果,在结果上);6服务。addevent侦听器(Faultevent .故障,on FAuLT);七服务GetBook();8}直接通过类对象的loadWSDL()方法调用远程WebService,动态为类对象指定相关的处理函数,然后和标签一样调用远程服务方法既可1 internalfuncnresult(evt :结果事件): void 2 { 3警报。显示(evt。结果。id);4 } 56 internalfuncofault(evt :故障事件): void 7 { 8警报。显示(evt。过错。故障细节。tostring());9}如上便完成了使用服务类通过编程的方式访问远程服务方法的调用。下面来看看服务返回数据表等负责类型,在弯曲客户端该怎么解析。首先定义服务方法如下:1[WebMethod(描述='该方法将返回数据表类型的数据)]2 public data table getdatatable()3 { 4 datatabledt=new datatable(' Books ');5dt .列。添加('身份证',类型为(int));6dt .列。添加('名称,类型(字符串));7dt .列。添加('作者,类型(字符串));8dt .列。添加('价格,类型为(双));910数据行dr=dt .NewRow();11dr[' Id ']=1;12dr[' Name ']=' 《Flex游戏开发》 ';13dr['作者']='张三;14dr['价格']=54.85;15dt .行。添加(dr);1617dr=dt .NewRow();18dr[' Id ']=2;19dr[' Name ']=' 《Flash游戏开发》 ';' 20dr['作者']='李四;21dr['价格']=65.50;22dt .行。添加(dr);2324returndt25}同样在弯曲客户端通过服务来访问就可以了,下面是使用mx:WebServive标签访问(这里需要注意,MX :操作标签的名字必须与服务端的服务方法同名):1mx : web service id=' my service ' 2 wsdl=' http://localhost :1146/dataweb service。asmx?wsdl"useproxy="false"3m x :操作名称="GetDataTable"4/MX :操作5/MX : web服务提供好了WebService,客户端也连接上了WebService,现在只差调用服务提供的远程方法了。如下:1 internalfuncontable():无效2 { 3我的服务。addevent listener(结果事件.结果,成功);我的服务。addevent listener(故障事件.故障,on FAuLT);5分钟服务getdatatable。send();6 } 78 internalfouncement(evt :结果事件): void 9 { 10//bookgrid。数据提供者=这个。我的服务。getdatatable。最后的结果。桌子。书籍。行;11 } 1213内部功能故障(EVT :故障事件):空隙14 { 15警报。显示('调用服务方法失败,详细:' evt。过错。故障细节。tostring());1617}将服务的返回值绑定在弯曲的数据网格组件,mxml的相关代码如下:1mx : panel x=' 41 ' y=' 123 ' width=' 480 ' height=' 279 ' layout=' absolute ' font size=' 12 ' 2mx 3360 datagridx=' 10 ' y=' 10 ' width=' 436 ' id=' bookGrid ' 3d data provider=' { this。我的服务。getdatatable。最后的结果。桌子。书籍。rows } ' 4mx 3360列5m x : datagridcolumnhember编号数据字段=' Id '/6mx : datagridcolumnheadertext='书名数据字段='名称'/7mx 3360 datagridcolumnhertxt='作者数据字段='作者'/8mx 3360 datagridcolumnhertxt='价格数据字段=' Price '/9/MX :列10/MX :数据网格11 MX 3360控制栏12 MX 3360按钮标签=' DataTable '单击=' onTable()'/13/MX :控制栏14/MX 3360面板通过数据网格的数据提供者属性绑定数据网格组件的数据源,除了直接通过'{}'绑定表达式帮定外我们也可以在调用远程方法成功的处理函数里给数据网格指定数据源,见上面代码中注释的代码部分{这个。我的服务。getdatatable。最后的结果。桌子。书籍。行}表示将远程服务方法GetDataTable()的返回结果(数据表)的所有行作为数据源与数据网格组件进绑定,其中书为数据源数据表的名字,详细见前面服务方法的定义出。程序运行结果如下图

与泛型集合相比,DataSet、DataTable在性能上有很大差距,复杂的序列化和反序列化过程也非常负责。自从2000年引入泛型以来。net 2.0,我一直更喜欢使用泛型来交付大数据。好了,接下来我将介绍如何处理Flex中WebService方法返回的通用集合数据。我们有以下WebService方法定义:1 [WebMethod(Description='此方法返回泛型集合')]2 public listbooks booklist()3 { 4 returninlistbook 5 { 6 new book 7 { 8ID=1,9Name=' 《Flex游戏开发》 ',10Author='张三',11price=54.8512},13newbook14 {15id=1,16name=' 《Flash游戏开发》 ',17author='李四',18Price=65.501921}与DataSet、DataTable相比,使用List返回数据更容易处理。通过在WebService的调试环境中直接测试返回List的WebService方法,我们可以看到如下结果:

这是以泛型组合(List)形式返回的数据形式,比DataTable返回的结果更简洁明了。话虽如此,我们如何在Flex下获取这个返回值并处理这个值呢?事实上,它已经清楚地表明了我们如何处理它。如果你仔细看图片,你会发现“ArrayOfBook”。这是什么东西?有没有可能在客户端以数组的形式获取这个返回值?为了进一步了解细节,我们需要深入内部去了解返回值的具体结构。以下信息可以通过Flex Builder的调试环境获得:

你看清楚了吗?BookList方法的lastResult结构集下有两个对象。通过点击节点,我们知道是我们通过ListBook返回的两个Book对象,lastResult的类型是mx.collections.ArrayCollection这真的不是ActionScript中的数组集合吗?在这种情况下,网络服务返回的通用收集数据可以通过lastResult直接从Flex客户端获得。代码块如下:1 internal functionontable(): void 2 { 3 my service . addevent listener(result event . result,on success);4 my service . addevent listener(fault event。故障,on FAuLT);5my服务。booklist . send();6 } 78 internalfunconsuccess(evt : result event): void 9 { 10 vararrac 3360 arraycollection=this . my service . booklist . last resultasaraycollection;11 bookgrid . data provider=arrC;12 } 1314 internalfunctionfault(evt : fault event): void 15 { 16 alert . show('调用WebService方法失败,详细信息:' evt . fault . fault detail . tostring());1718}对应的mxml代码如下(运行结果与上面返回的DataTable类型相同)。1mx : panel x=' 41 ' y=' 123 ' width=' 480 ' height=' 279 ' layout=' absolute ' font size=' 12 ' 2mx 3360 datagridx=' 10 ' y=' 10 ' width=' 436 ' id=' bookGrid ' 3m x : columns 4 mx3 360 datagridcolumnheadext=' number ' data field=' id '/5mx : datagridcolnhead由于个人能力有限,希望大家能改正文中的不足。如果你有什么好的建议,我们可以互相讨论,一起学习,一起进步!

版权声明:基于网络服务的数据访问(二)Flex和 净(三)是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。