我正在使用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表单。
答案 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());