flex wcf 数据传输

来源:互联网 发布:数据科学家云上工作室 编辑:程序博客网 时间:2024/05/21 10:29
最近跟哲子做个项目,本来可以用Asp.net轻松搞定,但是鉴于大家都比较想试用下学习已久的技术,所以便出现了Flex与WCF +Entity这样得前后台组合。项目开始之初,着实为两者之间的交互头疼一番,在经过大量资料得获取后,终于解决,以下写出简要的注意事项,由于WCF 我还是个彻头彻尾的门外汉,数据访问层的东西,只是把“欢”的部分代码贴出来供大家借鉴之用
    首先是WCF的app.config,这个是重中之重,因为Flex支持的Soap协议为1.1版本,所以WCF发布的WebService也应该为相应的版本。配置方法,主要是将“endpoint ”节点中“binding”项设置为“basicHttpBinding”即可
下面是“欢”的一段C#代码
[c#]
///
/// 获得数据库中所有用户的信息
///
/// 用户列表,失败返回null
public List GetAllUsers()
{
List list = new List();
using (KnowledgeBaseEntities knowledge = new KnowledgeBaseEntities())
{
try
{
foreach (var p in knowledge.User)
{
UserInfo user = new UserInfo();
user.userName = p.UserName;
user.password = p.Password;
UserInformation userinfomation = knowledge.UserInformation.First(q => q.UserName == p.UserName);
user.readAuthority = userinfomation.ReadAuthority;
user.uploadAuthority = userinfomation.UploadAuthority;
list.Add(user);
}
return list;
}
catch (Exception)
{
return null;
}
}
}

[/c#]
然后是Flex连接WebService的实例代码,因为程序采用的cairngorm框架,小猪实用中省去了delegate一环,将所有事务写在 command中,便于大家理解,因为Demo赶的比较急,两天两夜几乎没睡觉,所以没有条件细致的写下注释,请大家多多包涵


PLAIN TEXT
ACTIONSCRIPT:
package wbt.command
{
  import com.adobe.cairngorm.commands.ICommand;
  import com.adobe.cairngorm.control.CairngormEvent;
 
  import mx.collections.ArrayCollection;
  import mx.controls.Alert;
  import mx.managers.CursorManager;
  import mx.rpc.Responder;
  import mx.rpc.events.FaultEvent;
  import mx.rpc.events.ResultEvent;
  import mx.rpc.soap.WebService;
 
  import wbt.model.wbtModelLocator;
  import wbt.vo.userVO;
 
  public class userListCommand implements ICommand
  {
    //cairngorm框架中的数据Model
    private var _model:wbtModelLocator = wbtModelLocator.getInstance();
    public var service:WebService = new WebService();
    public function userListCommand()
    {
    }
    public function execute(event:CairngormEvent):void
    {
      CursorManager.setBusyCursor();//在读取数据时设置鼠标状态为忙
      service.loadWSDL("再此填入WebService的WSDL地址");
      service.addEventListener(ResultEvent.RESULT,onResult);
      service.addEventListener(FaultEvent.FAULT,onFault);
      service.GetAllUsers();//getAllUsers为WebService提供得方法
    }
    internal function onResult(event:ResultEvent):void
    {
      _model.userList.removeAll();//读取成功前要将数据清空,再重新填入
    //下面为将数据结果填充到model
    var tempArr:ArrayCollection
                   = service.GetAllUsers.lastResult as ArrayCollection;
      for(var i:int=0;i      {
        var ob:Object = tempArr.getItemAt(i);
        var tempUser:userVO = new userVO();
        tempUser.UserName = ob.userName;
        tempUser.ReadAuthority = ob.readAuthority;
        tempUser.UploadAuthority = ob.uploadAuthority;
        _model.userList.addItem(tempUser);
      }
      CursorManager.removeAllCursors();
      service.disconnect();//关闭连接是个好习惯
    }
    internal function onFault(event:FaultEvent):void
    {
      Alert.show(event.fault.faultDetail.toString());
    }
 
  }
}
原创粉丝点击