从其他项目中使用WCF
我对silverlight和WCF Ria服务非常陌生。我有WPF和WinForms方面的背景经验 现在我正在开发一个silverlight应用程序,它基本上由一个从远程服务器获取数据的网页组成 我已经阅读了大量的论坛和文章,解释了如何使用和使用web服务和WCF。我一直在学习如何创建一个从数据库获取数据的简单应用程序,效果非常好 问题是我不想在我的UI控件中有任何与WCF相关的代码或资源。 现在我正在使用分层编程体系结构: UI-->BLL-->DAL 这些元素中的每一个都是同一解决方案中的单个项目。我的DAL项目是与服务器通信的web服务(WCF Ria) 我的DAL项目中有一个简单的类(用户服务)和方法(GetUsers),代码如下:从其他项目中使用WCF,wcf,silverlight,web-services,Wcf,Silverlight,Web Services,我对silverlight和WCF Ria服务非常陌生。我有WPF和WinForms方面的背景经验 现在我正在开发一个silverlight应用程序,它基本上由一个从远程服务器获取数据的网页组成 我已经阅读了大量的论坛和文章,解释了如何使用和使用web服务和WCF。我一直在学习如何创建一个从数据库获取数据的简单应用程序,效果非常好 问题是我不想在我的UI控件中有任何与WCF相关的代码或资源。 现在我正在使用分层编程体系结构: UI-->BLL-->DAL 这些元素中的每一个都是同一解决方案中的单
LoadOperation<u_WEBUSERS> loadOp = this.userContext.Load(this.userContext.GetU_WEBUSERSQuery());
loadOp.Completed += (sender, args) =>
{
users = new List<UserObj>();
foreach (var v in loadOp.Entities)
{
u_WEBUSERS uweb = v as u_WEBUSERS;
UserObj u = new UserObj();
u.Nome = uweb.nome;
u.Morada = uweb.morada;
users.Add(u);
}
};
return users;
LoadOperation loadOp=this.userContext.Load(this.userContext.GetU_WEBUSERSQuery());
loadOp.Completed+=(发送方,参数)=>
{
用户=新列表();
foreach(loadOp.Entities中的变量v)
{
u_WEBUSERS uweb=v作为u_WEBUSERS;
UserObj u=新的UserObj();
u、 Nome=uweb.Nome;
u、 莫拉达=uweb.Morada;
用户。添加(u);
}
};
返回用户;
问题是,我的users对象返回null。如果我使用断点,我会看到第一个断点正在结束该方法,并且仅在调用完成的事件之后
有没有办法让my GetUsers()返回数据库信息?
也许我使用的分层架构不适合我想要的。。。
感谢您将同步和异步代码混合在一起。您正在设置completed事件,但当您未指定处理程序时,调用直到完成才会返回。看。所以你的代码应该是:
LoadOperation<u_WEBUSERS> loadOp = this.userContext.Load(this.userContext.GetU_WEBUSERSQuery());
users = new List<UserObj>();
foreach (var v in loadOp.Entities)
{
u_WEBUSERS uweb = v as u_WEBUSERS;
UserObj u = new UserObj();
u.Nome = uweb.nome;
u.Morada = uweb.morada;
users.Add(u);
}
return users;
LoadOperation loadOp=this.userContext.Load(this.userContext.GetU_WEBUSERSQuery());
用户=新列表();
foreach(loadOp.Entities中的变量v)
{
u_WEBUSERS uweb=v作为u_WEBUSERS;
UserObj u=新的UserObj();
u、 Nome=uweb.Nome;
u、 莫拉达=uweb.Morada;
用户。添加(u);
}
返回用户;
您可以使用简单的操作
或操作
委托:
public void LoadUsers(Action<IEnumerable<UserObj>> callBack)
{
LoadOperation<u_WEBUSERS> loadOp = this.userContext.Load(this.userContext.GetU_WEBUSERSQuery());
loadOp.Completed += (sender, args) =>
{
users = new List<UserObj>();
foreach (var v in loadOp.Entities)
{
u_WEBUSERS uweb = v as u_WEBUSERS;
UserObj u = new UserObj();
u.Nome = uweb.nome;
u.Morada = uweb.morada;
users.Add(u);
}
if(callBack != null)
callBack(users);
};
}
公共void加载用户(操作回调)
{
LoadOperation loadOp=this.userContext.Load(this.userContext.GetU_WEBUSERSQuery());
loadOp.Completed+=(发送方,参数)=>
{
用户=新列表();
foreach(loadOp.Entities中的变量v)
{
u_WEBUSERS uweb=v作为u_WEBUSERS;
UserObj u=新的UserObj();
u、 Nome=uweb.Nome;
u、 莫拉达=uweb.Morada;
用户。添加(u);
}
if(回调!=null)
回调(用户);
};
}
谢谢。它工作得很好。我几乎放弃了希望。我从来没有想过要用动作门。非常感谢,对不起,它就是不起作用。“我的用户”对象始终返回,不包含任何内容。