调用DataServiceQuery.EndExecute()时,Windows商店应用,WCF数据服务InvalidOperationException?

时间:2013-07-27 02:55:03

标签: c# wcf windows-8 windows-store-apps wcf-data-services

我查找相关数据发现Windows商店应用程序仅支持异步WCF调用以确保响应式UI。 Here is a relative question.

我实现了我的数据服务并且做到了这一点。这是代码:

MyDataServiceContext ctx = new MyDataServiceContext(uri);

DataServiceQuery<COURSE_OK> query =
        (DataServiceQuery<COURSE_OK>)(from crs in ctx.COURSE_OK
                                      select crs);

TaskFactory<IEnumerable<COURSE_OK>> tf = new TaskFactory<IEnumerable<COURSE_OK>>();
var result = await tf.FromAsync(query.BeginExecute(null, null),
                                ira => query.EndExecute(ira)); // InvalidOperationException

foreach (var a in result)
{
    System.Diagnostics.Debug.WriteLine("{0}", a.TITLE);
}

我只成功了一次,之后它总是在query.EndExecute(ira)方法中崩溃,并且用户代码未处理InvalidOperationException。

此外,它在控制台应用程序中运行良好。我猜主要的问题是Windows商店应用程序,但如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

你的功能看起来很不错。这对我有用:

var queryTask = Task.Factory.FromAsync<IEnumerable<TResult>>(query.BeginExecute(null, null), (asResult) =>
{
   var result = query.EndExecute(asResult).ToList();
   return result;
});

也许你不应该在每次通话时初始化你的背景。只需将其初始化一次,并在每次需要时重复使用。