FLASH AS3 WebService

ExpandedBlockStart.gif 代码
MyWebService. as

package {
import flash.net.
* ;
import flash.events.
* ;

public   class  MyWebService extends EventDispatcher {

   
private  var wsUrl:String;
   
private  var targetmethodName:String;

   
public  function MyWebService(url:String): void  {
    wsUrl 
=  url;
   }
   
public  function load(methodName:String, ...args): void  {
    
// trace(methodName);
    targetmethodName  =  methodName;
    var param:String
= "" ;
    
// trace(args.length)
     for  (var i: int   =   0 ; i < args.length; i ++ ) {
     
if  (param != "" ) {
      param 
+=   " & " + args[i];
     } 
else  {
      param 
=  args[i];
     }
    }
    
// trace("param::"+param);
    var urlLoader:URLLoader  =   new  URLLoader();
    var urlRequest:URLRequest 
=   new  URLRequest();
    urlLoader.addEventListener(
" complete " , completeHandler);
    urlLoader.addEventListener(
" ioError " , ioerrorHandler);
    urlRequest.url 
=  wsUrl  +   " / "   +  methodName;
    urlRequest.method 
=  URLRequestMethod.POST;
    urlRequest.requestHeaders.push(
new  URLRequestHeader( " Content-Type " " application/x-www-form-urlencoded " ));
    urlRequest.data 
=  param;
    urlLoader.load(urlRequest);
    
// args = null;
    
// MyGC.GC();
   }
   
private  function completeHandler(e:Event): void  {
    e.target.removeEventListener(
" complete " , completeHandler);
    e.target.removeEventListener(
" ioError " , ioerrorHandler);
    
// urlLoader = null;
    
// urlRequest = null;
    
// MyGC.GC();
    
// trace(XML(e.target.data).toString());
    MyGC.GC();
    dispatchEvent(
new  MyEventer( " callComplete " , {method:targetmethodName,data:e.target.data}));
   }

   
private  function ioerrorHandler(e:IOErrorEvent): void  {

    e.target.removeEventListener(
" complete " , completeHandler);
    e.target.removeEventListener(
" ioError " , ioerrorHandler);
    
// urlLoader = null;
    MyGC.GC();
    
// urlRequest = null;
    
// MyGC.GC();
    
// trace(e)
    dispatchEvent( new  MyEventer( " callError " , {method:targetmethodName,data: null }));
   }
}
}

import flash.events.
* ;
import flash.net.
* ;
class  MyEventer extends Event {
private  var info:Object;
public  function MyEventer(type:String, info:Object, bubbles:Boolean  =   false , cancelable:Boolean  =   false ): void  {
   super(type, bubbles, cancelable);
   
this .info  =  info;
}
public  function  get  eventInfo():Object {
   
return   this .info;
}
public  function MyEventerGC(): void  {
   
this .info  =   null ;
   MyGC.GC();
}
public   override  function toString():String {
   
return  formatToString( " Event: " , " type " , " bubbles " , " cancelable " , " eventInfo " );
}
}

-------------------------------------------------------------------------------------------

package
{
    import flash.net.LocalConnection;
// import flash.system.System;
     public   class  MyGC
    {
        
public   static  function GC()
        {
   
// trace("内存begin:"+System.totalMemory);
     try  {
     
new  LocalConnection().connect( ' foo ' );
     
new  LocalConnection().connect( ' foo ' );
    } 
catch  (e: * ) {}
   
// trace("内存 end:"+System.totalMemory);
        }
    }
}

-------------------------------------------------------------------------------------------

调用方法:

var ws 
=   new  WebServices( " http://192.168.1.7/webservice/Test.asmx " );
ws.addEventListener(
" callComplete " , wsCompleteHandler);
ws.addEventListener(
" callError " , wsIOErrorHandler);

function wsIOErrorHandler(e):
void {
trace(e.eventInfo.method)
e.MyEventerGC();
}

function wsCompleteHandler(e):
void {
// trace("--------------------")
// trace(e.eventInfo.method)
// trace(e.eventInfo.data)
// trace("--------------------")
var listXML:XML  =  XML(e.eventInfo.data);
trace(listXML)
e.MyEventerGC();
}

ws.load(
" 方法名 " , " 参数1=参数1的值 " , " 参数2=参数2的值 " );
// 之所以用"参数1=参数1的值"的格式是为了省略分析WebService的步骤

最初的版本在使用时一直出现内存泄露的问题,对as3不熟,搞了很久才解决。

参考资料:

http://www.SnowManBlog.com

http://www.roading.net

转载于:https://www.cnblogs.com/alby/archive/2010/01/08/flash-as3-webservice.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值