我目前正在构建一个基于Xamarin的移动应用程序。对于那个项目,我创建了一个框架4.5的PCL项目。我使用VS 2013作为开发IDE。现在我想为这个PCL添加一个WCF服务引用。在向此PCL项目添加服务引用时,我注意到禁用了异步操作的生成。请检查图像的更多细节。在PCL服务参考设置中禁用基于任务的异步操作
我通过的NuGet添加BCL.Async包到项目中。但是我仍然无法从单选按钮列表(禁用它)访问基于任务的的。
那么有没有什么办法可以在服务客户端中生成基于任务的异步操作?
我目前正在构建一个基于Xamarin的移动应用程序。对于那个项目,我创建了一个框架4.5的PCL项目。我使用VS 2013作为开发IDE。现在我想为这个PCL添加一个WCF服务引用。在向此PCL项目添加服务引用时,我注意到禁用了异步操作的生成。请检查图像的更多细节。在PCL服务参考设置中禁用基于任务的异步操作
我通过的NuGet添加BCL.Async包到项目中。但是我仍然无法从单选按钮列表(禁用它)访问基于任务的的。
那么有没有什么办法可以在服务客户端中生成基于任务的异步操作?
我之前没有使用过Xamarin,但我会假设APM,也许其中实际上支持任务,这只是一个Visual Studio限制。尝试使用wsdl.exe手动生成代码。这是Visual Studio在添加服务引用时调用的工具。
您需要通过/parameters
交换机通过newAsync
(任务)或oldAsync
(APM)。
讨厌将它分解给你,但是你不能在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/consuming/wcf/
现在,如果有人能想出如何捕获一个故障异常的任务,这将是真棒包装时!
我有完全相同的问题。我在某处读到,在项目属性中禁用定位到wp8可能会启用该选项。但是这对我没有用。 – Michelh91