Flex与服务器交互之三(使用WebService组件同服务器WebService通讯)

    由于Flex只是一种客户端技术其本身并不能直接同数据库交互,在实际的应用开发过程中Flex提供了如URLRequest、HTTPService、RemoteObject、WebService等类以实现同服务器的通讯和数据交互,下面做一些介绍和实例解析:
   1、使用WebService组件同服务器交互
      WSDL描述以供Flex WebService解析调用相关接口信息(如图):

     使用过程中在程序中添加一个WebService组件,设置WSDL属性为WebService的WSDL地址 调用节点中定义的方法,设置result和fault事件函数接收ResultEvent和FaultEvent对象获取返回数据或捕获错误
      WebService组件官方帮助文档http://livedocs.adobe.com/flex/3/html/help.html?content=data_access_2.html
      WebService组件相关属性和事件:http://livedocs.adobe.com/flex/3/langref/mx/rpc/soap/mxml/WebService.html
具体的方法中再具体定义) result="No default." //请求完成后触发的事件以处理返回结果 /> 
  WebService调用方法节点属性和事件(可包含多个)

   2、应用示例:(调用WebService 根据用户输入的ID 查询返回XML中用户详细信息):
   服务器端WebService定义:
    [WebService(Namespace = "http://csdn.richardjun.net/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem(false)] // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. // [System.Web.Script.Services.ScriptService] public class SearchUserService : System.Web.Services.WebService { [WebMethod] public String SearchUserName(String useID) { XElement element = XElement.Load(Server.MapPath( @"/FlexService/Test.XML")); IEnumerable uses = from v in element.Elements().ToList() where (String)v.Attribute("id") == useID select v; if (uses != null && uses.Count() > 0) return uses.First().ToString(); else return String.Empty; } }    

服务器端用户详细信息Test.XML文件:
  宋江 天魁星 梁山泊寨主 锟吾剑 卢俊义 天罡星 梁山泊副寨主 枪、棒 吴用 天机星 梁山泊军师 铜链 公孙胜 天闲星 梁山泊副军师 松纹古定剑 大刀关胜 天勇星 梁山泊马军五虎大将之首 青龙偃月刀 林冲 天雄星豹子头 梁山泊马军五虎大将之二 丈八蛇矛

Felx代码:
      
   引入WebService组件(节点定义WebService定义的方法信息(对应WSDL文件的方法描述)可以为多个):
   
    Flex中发送请求:
private function requestWebService():void { uReqWebService.SearchUserName(txtUserID.text); //定义的方法 labMsg.alpha = 1; }  

    Flex中接收返回数据:
private function serviceReqResult(e:ResultEvent):void { if(e.result.toString().length > 0) { var arry:XML = XML(e.result); if(arry != null && arry.length()> 0) { labName.text = arry.children()[0]; labNikeName.text = arry.children()[1]; labPosition.text = arry.children()[2]; } } else { labName.text = ""; labNikeName.text = ""; labPosition.text = ""; Alert.show("查不到匹配的用户信息!"); } labMsg.alpha = 0; }  

    Flex中错误处理:
private function serviceReqFault(e:FaultEvent):void { Alert.show("请求WebService出错!原因是:" + e.message); labMsg.alpha = 0; }
结果如图:


    Flex与服务器交互之三(使用WebService组件同服务器WebService通讯)_第1张图片

你可能感兴趣的:(Flex,+,Flash,Web开发)