6

在 Visual Studio 2012 中有一个方便的“生成基于任务的操作”选项,可用于生成WCF 服务调用的版本TaskTask<T>版本。

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

据我所知,这仅在项目以 .NET 4.5 为目标时才有效。有谁知道使用 .NET 4.0 客户端生成基于任务的操作的方法?

4

1 回答 1

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.0 服务参考文件夹)(来自 .Net 4.5 服务参考文件夹)

总之,您必须在 .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 文档。

总而言之,这不是一个好的解决方法

于 2016-04-14T14:48:46.927 回答