客户端挂断,然后从服务器获取非空列表

时间:2015-09-02 10:58:12

标签: c# wpf entity-framework wcf

我正在使用Entity Framework和WCF的组合来为客户端提供数据。但由于某种原因,客户端挂断(仅当结果是非空列表时),然后调用简单的服务器函数:

public List<CardSet> GetCollactions(string 
{
    try
    {
        if (db.Users.Any(x => x.username == username))
        {
            User requestingUser = db.Users.FirstOrDefault(x => x.username == username);
            List<CardSet> result = requestingUser.Collections;
            if (result != null)
                return result;
        }
    }
    catch (Exception e)
    {
        db.Errors.Add(new Error() { exception = e.Message, innerException = e.InnerException.Message, source = "GetCollection for user '" + username + "'", time = DateTime.Now });
        db.SaveChanges();
    }
    return new List<CardSet>();
}

在服务器上,该功能完美执行,数据库的结果是正确的。我在客户端上调用这个函数:

List<CardSet> collections = client.GetCollactions(username).ToList();
foreach (CardSet collection in collections)
{
    CollectionList.Items.Add(collection.name);
}

编辑:客户端是WPF表单。

1 个答案:

答案 0 :(得分:0)

您必须以异步方式从服务请求以避免客户端挂起,首先从线程列表中请求异步数据,并在UI线程中接收数据时继续操作:

Task.Factory.StartNew(() => client.GetCollactions(username).ToList())
.ContinueWith(result =>
{
    foreach (CardSet collection in result.Result)
    {
        CollectionList.Items.Add(collection.name);
    }
},TaskScheduler.FromCurrentSynchronizationContext());