flex可以访问webservice,与服务器进行交付。以下是flex端的代码。
package com
{
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.events.IEventDispatcher;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.rpc.AbstractOperation;
import mx.rpc.soap.WebService;
import mx.controls.Alert;
public class ServiceAccess extends EventDispatcher
{
private var ws:WebService; //webservice.
public var _op:AbstractOperation;//抽象操作
private var _msg:String; //错误信息
private var result:XMLList; //不管是什么结果,都必须返回XMLLIST
private var urlwebservie:String; //webservice地址
private var _opargs:Array; //参数。
private var _opname:String; //调用的函数名。
/**
* 调用的函数名称
* @param value
*
*/
public function set OpName(value:String):void
{
_opname=value;
}
/**
* 参数集。
* @param value
*
*/
public function set OpArgs(value:Array):void
{
_opargs=value;
}
public function set UrlWerbservice(value:String):void
{
urlwebservie=value;
}
/**
*
* @return 通过webservice 返回的结果集。
*
*/
public function get Result():XMLList
{
return result;
}
public function ServiceAccess(target:IEventDispatcher=null)
{
super(target);
}
/*************************
* 获取webservice
* */
public function getWebservice():void
{ if(ws==null)
{
ws=new WebService();
ws.loadWSDL(urlwebservie);
}
}
/**
*获取结果。
*
*/
public function GetResult():void
{
getWebservice();
_op=new AbstractOperation();
_op = ws.getOperation(_opname);
_op.arguments=_opargs;
_op.addEventListener(ResultEvent.RESULT,getResult);
_op.addEventListener(FaultEvent.FAULT, getFault);
_op.send();
}
//从webvice 中获取值。
private function getResult(evt:ResultEvent):void
{
var xml:XML;
var xmlString:String;
xml=new XML(evt.result);
xmlString=xml;
result=new XMLList(xmlString);
var e:Event=new Event(Event.COMPLETE);
this.dispatchEvent(e);
_op.removeEventListener(ResultEvent.RESULT,getResult);
}
//捕捉错误处理函数。
private function getFault(evt:FaultEvent):void
{
_msg=evt.fault.faultDetail;
Alert.show(_msg);
//监听之后删除,避免重复监听
_op.removeEventListener(FaultEvent.FAULT, getFault);
}