Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从其他项目中使用WCF_Wcf_Silverlight_Web Services - Fatal编程技术网

从其他项目中使用WCF

从其他项目中使用WCF,wcf,silverlight,web-services,Wcf,Silverlight,Web Services,我对silverlight和WCF Ria服务非常陌生。我有WPF和WinForms方面的背景经验 现在我正在开发一个silverlight应用程序,它基本上由一个从远程服务器获取数据的网页组成 我已经阅读了大量的论坛和文章,解释了如何使用和使用web服务和WCF。我一直在学习如何创建一个从数据库获取数据的简单应用程序,效果非常好 问题是我不想在我的UI控件中有任何与WCF相关的代码或资源。 现在我正在使用分层编程体系结构: UI-->BLL-->DAL 这些元素中的每一个都是同一解决方案中的单

我对silverlight和WCF Ria服务非常陌生。我有WPF和WinForms方面的背景经验

现在我正在开发一个silverlight应用程序,它基本上由一个从远程服务器获取数据的网页组成

我已经阅读了大量的论坛和文章,解释了如何使用和使用web服务和WCF。我一直在学习如何创建一个从数据库获取数据的简单应用程序,效果非常好

问题是我不想在我的UI控件中有任何与WCF相关的代码或资源。 现在我正在使用分层编程体系结构:

UI-->BLL-->DAL

这些元素中的每一个都是同一解决方案中的单个项目。我的DAL项目是与服务器通信的web服务(WCF Ria)

我的DAL项目中有一个简单的类(用户服务)和方法(GetUsers),代码如下:

        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)
回调(用户);
};
}

谢谢。它工作得很好。我几乎放弃了希望。我从来没有想过要用动作门。非常感谢,对不起,它就是不起作用。“我的用户”对象始终返回,不包含任何内容。