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;
}
}
}
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());
}
}
}
首先是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());
}
}
}
- flex wcf 数据传输
- WCF - 大数据传输
- WCF大数据传输
- WCF全双工数据传输
- WCF大数据传输
- WCF 大数据传输问题
- WCF大数据传输
- flex - java 数据传输
- flex数据传输与交互
- FLEX 数据传输json
- [WCF 学习笔记] 8. 数据传输
- wcf list 大数据传输 传输对象过多
- 大数据传输下的WCF配置
- WCF数据传输配置文件参数的设置说明
- WCF与Flex的通信
- 让Flex与Java间进行数据传输
- FLEX TitleWindow之间数据传输的示例
- flex TitleWindow之间数据传输的示例
- PHP基础14-才分合并字符串
- hdu 2757 Ocean Currents(优先队列+bfs)
- 关于VNC显示不正常的问题的解决
- 系统维护之后需作性能分析(Analyze)
- SQL Server2008连接错误'233',帮你解决
- flex wcf 数据传输
- 在dos下实现图形图像编程(非Graphics.h)和其他第三方库
- C++中的const成员函数
- 解决ScrollView 与viewpager 焦点冲突
- 关于大小端序和字节对齐的总结
- 3D算法
- Linux后台进程管理
- 笑话
- Struts2 - 属性驱动与模型驱动