生成基于任务的客户端WCF服务调用.NET 4.0

cor*_*erm 6 wcf .net-4.0 async-await visual-studio-2012

在Visual Studio 2012中,有一个方便的"生成基于任务的操作"选项,您可以使用该选项生成Task和生成Task<T>WCF服务调用.

我正在使用Microsoft.Bcl.Async NuGet包来利用我的.NET 4.0项目中的async/await.但是,我似乎无法使用VS 2012中的配置服务引用向导生成基于任务的操作(该选项已禁用).

据我所知,这只适用于项目的目标是.NET 4.5.有谁知道用.NET 4.0客户端生成基于任务的操作的方法?

Lui*_*sta 2

您可以使用此解决方法在 .Net 4.0 中创建基于异步任务的 wcf 客户端

  • 打开 NuGet 并将“Microsoft.Bcl.Async”包添加到您的 .Net 4.0 项目中
  • 使用与 .Net 4.0 项目同名的新 .Net 4.5 项目创建新解决方案
  • 添加与 .Net 4.0 项目中创建的服务引用同名的服务引用(到所需的 Web 服务)
  • 确保在高级选项对话框中选中“允许生成异步操作”下的“生成基于任务的操作”选项
  • 打开 .Net 4.5 项目的服务引用文件夹(“NET_4.5_PROJECT_FOLDER\Service References\YOUR__SERVICE_REFERENCE_FOLDER\”)
  • 复制文件夹中的所有文件
  • 打开 .Net 4.0 项目的服务引用文件夹(“NET_4.0_PROJECT_FOLDER\Service References\YOUR__SERVICE_REFERENCE_FOLDER\”)
  • 粘贴您之前(从 .Net 4.5 服务引用文件夹)复制的文件(到 .Net 4.0 服务引用文件夹)

总之,您必须在 .Net 4.5 中生成服务引用并将其复制到您的 .Net 4.0 项目中。必须将“Microsoft.Bcl.Async”包添加到您的.Net 4.0 项目中。

编辑

我发现此解决方法仅在计算机上安装了 .Net Framework 4.5 时才有效。如果您在安装了.Net Framework 4.0的计算机上运行该程序,则该程序无法运行(.Net Framework 4.5不支持Windows XP,因此这是测试该程序的良好环境)。未安装.Net Framework 4.0时抛出此异常:

无法序列化类型“System.Threading.Tasks.Task`1[System.Boolean]”。请考虑使用 DataContractAttribute 属性标记它,并使用 DataMemberAttribute 属性标记要序列化的所有成员。如果类型是集合,请考虑使用 CollectionDataContractAttribute 对其进行标记。有关其他支持的类型,请参阅 Microsoft .NET Framework 文档。

总结起来,这不是一个好的解决方法