webService类的使用和动态执行

 

先看一段代码:
var ws:WebService ;

//调用WebService服务端发布的login(username,password)方法

private function doLogin():void{

  ws = new WebService();

  ws.wsdl = "http://localhost:9090/HelloWorld/LoginService?wsdl";

  ws.loadWSDL();

//调用login方法,方法参数为username,password

  ws.login.addEventListener(ResultEvent.RESULT,loginSuccessHandler);

  ws.login.addEventListener(FaultEvent.FAULT,loginFailHandler);

  ws.login("meteor","123");

}

private function loginSuccessHandler(event:ResultEvent):void{

  Alert.show("Login Successful!");

}

private function loginFailHandler(event:FaultEvent):void{

  Alert.shor("Login fail!");

}

//调用WebService服务端发布的getInfo()方法

private function doLogin():void{

  ws = new WebService();

  ws.wsdl = "http://localhost:9090/HelloWorld/getInfoWervice?wsdl";

  ws.loadWSDL();

//调用getInfo方法

  ws.getInfo.addEventListener(ResultEvent.RESULT,getInfoHandler);

  ws.getInfo.loginaddEventListener(FaultEvent.FAULT,faultHandler);

  ws.getInfo();

}

private function getInfoHandler(event:ResultEvent):void{

  Alert.show("Get info Successful!");

}

private function faultHandler(event:FaultEvent):void{

  Alert.shor(event.fault.message);

}

以上代码中存在很多重复片段:每次调用WebService,都要写重复的代码。下面来创建一个动态的WebService服务类

+ expand sourceview plaincopy to clipboardprint?
package common.service  
{  
    import mx.controls.Alert;  
    import mx.rpc.AbstractOperation;  
    import mx.rpc.events.FaultEvent;  
    import mx.rpc.events.ResultEvent;  
    import mx.rpc.soap.SOAPHeader;  
    import mx.rpc.soap.WebService;  
      
    public class BaseWebService extends WebService  
    {  
        private var _callBackHandler:Function;  
        private var _faultHandler:Function;  
        private var _args:Array;  
        public function BaseWebService()  
        {  
            super();  
              
        }  
        public function set callBackHandler(callBackHandler:Function):void{  
            this._callBackHandler = callBackHandler;  
        }  
        public function get callBackHandler():Function{  
            return this._callBackHandler;  
        }  
        public function set args(args:Array):void{  
            this._args = args;  
        }  
        public function get args():Array{  
            return this._args;  
        }  
        public function set faultHandler(faultHandler:Function){  
            this._faultHandler = faultHandler;  
        }  
        public function get faultHandler():Function{  
            return this._faultHandler;  
        }  
        public function initWsdl(wsdl:String):void{  
            this.wsdl = wsdl;  
            this.loadWSDL();  
        }  
        public function initHeader(header:SOAPHeader):void{  
            this.clearHeaders();  
            this.addHeader(header);  
        }  
        public function sendOperation(functionName:String,args:Array):void{  
            //根据方法名动态调用WebService服务器的方法  
            var operation:AbstractOperation = this.getOperation(functionName);  
            //为调用的方法添加监听器,回调函数由外部动态传入  
            operation.addEventListener(ResultEvent.RESULT,this.callBackHandler);  
            //为调用的方法添加错误监听器,如果传入的错误处理方法为空,则调用默认的处理方法  
            if(this.faultHandler){  
                operation.addEventListener(FaultEvent.FAULT,this.faultHandler);   
            }else{  
                operation.addEventListener(FaultEvent.FAULT,defaultFaultHandler);   
            }  
            //为调用的方法传参数,参数类型为Array  
            operation.arguments = args;  
            //执行调用的方法  
            operation.send();  
              
        }  
        private function defaultFaultHandler(event:FaultEvent):void{  
            Alert.show(event.fault.message);  
        }  
 
    }  

package common.service
{
 import mx.controls.Alert;
 import mx.rpc.AbstractOperation;
 import mx.rpc.events.FaultEvent;
 import mx.rpc.events.ResultEvent;
 import mx.rpc.soap.SOAPHeader;
 import mx.rpc.soap.WebService;
 
 public class BaseWebService extends WebService
 {
  private var _callBackHandler:Function;
  private var _faultHandler:Function;
  private var _args:Array;
  public function BaseWebService()
  {
   super();
   
  }
  public function set callBackHandler(callBackHandler:Function):void{
   this._callBackHandler = callBackHandler;
  }
  public function get callBackHandler():Function{
   return this._callBackHandler;
  }
  public function set args(args:Array):void{
   this._args = args;
  }
  public function get args():Array{
   return this._args;
  }
  public function set faultHandler(faultHandler:Function){
   this._faultHandler = faultHandler;
  }
  public function get faultHandler():Function{
   return this._faultHandler;
  }
  public function initWsdl(wsdl:String):void{
   this.wsdl = wsdl;
   this.loadWSDL();
  }
  public function initHeader(header:SOAPHeader):void{
   this.clearHeaders();
   this.addHeader(header);
  }
  public function sendOperation(functionName:String,args:Array):void{
   //根据方法名动态调用WebService服务器的方法
   var operation:AbstractOperation = this.getOperation(functionName);
   //为调用的方法添加监听器,回调函数由外部动态传入
   operation.addEventListener(ResultEvent.RESULT,this.callBackHandler);
   //为调用的方法添加错误监听器,如果传入的错误处理方法为空,则调用默认的处理方法
   if(this.faultHandler){
    operation.addEventListener(FaultEvent.FAULT,this.faultHandler);
   }else{
    operation.addEventListener(FaultEvent.FAULT,defaultFaultHandler);
   }
   //为调用的方法传参数,参数类型为Array
   operation.arguments = args;
   //执行调用的方法
   operation.send();
   
  }
  private function defaultFaultHandler(event:FaultEvent):void{
        Alert.show(event.fault.message);
       }

 }
}

在mxml中调用

var ws:BaseWebService;
private function login():void{

  ws = new BaseWebService();

  ws.initWsdl("http://localhost:9090/HelloWorld/getInfoWervice?wsdl");

  ws.sendOperation("login");

  ws.callBackHandler = loginSuccessHandler;

  ws.faultHandler = loginFailHandler;
  var arr:Array = new Array();
  arr.push("meteor");
  arr.push("123");

  ws.sendOperation("login",arr);

}


 

posted @ 2009-10-14 11:11  烟缸里的鱼  阅读(490)  评论(0编辑  收藏  举报