【问题标题】:Consuming WCF from other projects从其他项目使用 WCF
【发布时间】:2012-03-22 15:34:57
【问题描述】:

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

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

我已经阅读了大量解释如何使用和使用 Web 服务和 WCF 的论坛和文章。我关注了msdn walkthrough,了解如何创建一个从数据库获取数据的简单应用程序,效果很好。

问题是我的 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;

问题是我的用户对象返回 null。如果我断点,我看到第一个是结束方法,只有在调用完成的事件之后。

有什么方法可以让我的 GetUsers() 返回数据库信息? 也许我使用的分层架构不适合我想要的...... 谢谢

【问题讨论】:

    标签: wcf silverlight web-services


    【解决方案1】:

    您可以使用简单的ActionAction&lt;T&gt; 委托:

    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);
        };
    }
    

    【讨论】:

    • 谢谢。它工作得很好。我几乎要放弃希望了。我从没想过使用 Action 委托。非常感谢
    【解决方案2】:

    您将同步和异步代码混合在一起。您正在设置完成的事件,但是当您未指定处理程序时,调用在完成之前不会返回。请参阅example here。所以你的代码是:

    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;
    

    【讨论】:

    • 对不起,但它不起作用。我的用户对象总是返回没有内容。
    猜你喜欢
    • 2015-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-05
    相关资源
    最近更新 更多