13

我目前正在构建一个基于 Xamarin 的移动应用程序。对于那个项目,我创建了一个带有框架 4.5 的 PCL 项目。我使用 VS 2013 作为开发 IDE。现在我想向这个 PCL 添加一个 WCF 服务引用。在向这个 PCL 项目添加服务引用时,我注意到异步操作的生成被禁用。请检查图像以获取更多详细信息。

在此处输入图像描述

我通过 Nuget 将 BCL.Async 包添加到项目中。但我仍然无法从单选按钮列表(已禁用)访问基于任务的操作。

那么有没有办法在服务客户端中生成基于任务的异步操作呢?

4

2 回答 2

2

讨厌打破它,但你不能在 Xamarin 中生成基于任务的 WCF 客户端。原因是 Xamarin 或 Mono 实现了 Silverlight 集,这是一个有限的 WCF 实现。因此,您需要改用 SLSVCUTIL.exe(在 Xamarin 中添加服务引用将使用此工具)。SLSVCUTIL 生成的 silverlight WCF 客户端将仅基于异步。

一切都没有丢失!您可以使用 Task.FromAsync 方法轻松地将 silverlight 异步客户端包装到基于任务的客户端中。

取自 Xamarin 网站的示例:

public async Task<List<TodoItem>> RefreshDataAsync ()
{
  ...
  var todoItems = await Task.Factory.FromAsync <ObservableCollection<TodoWCFService.TodoItem>> (
    todoService.BeginGetTodoItems,
    todoService.EndGetTodoItems,
    null,
    TaskCreationOptions.None);

  foreach (var item in todoItems) {
    Items.Add (FromWCFServiceTodoItem (item));
  }
  ...
}

https://developer.xamarin.com/guides/xamarin-forms/web-services/sumption/wcf/

现在,如果有人能弄清楚如何在包装任务时捕获错误异常,那就太棒了!

于 2016-06-25T06:45:01.007 回答
1

我以前没有使用过 Xamarin,但我假设 APM 并且可能实际上支持 Tasks,这只是 Visual Studio 的限制。尝试手动使用wsdl.exe生成代码。这是添加服务引用时 Visual Studio 调用的工具。

您需要通过交换机传递newAsync(Tasks) 或oldAsync(APM) 。/parameters

于 2014-06-22T06:56:08.270 回答