【问题标题】:Generate Task-based client-side WCF service calls .NET 4.0生成基于任务的客户端 WCF 服务调用 .NET 4.0
【发布时间】:2013-06-23 00:42:01
【问题描述】:

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

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

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

【问题讨论】:

  • 您是否尝试过暂时切换到 .Net 4.5,生成 WCF 代码然后切换回来?
  • @svick 好主意,但不幸的是,切换回 4.0 后它不起作用。 "[ServiceReference] 对当前的 .NET Framework 版本或项目类型无效"

标签: wcf visual-studio-2012 .net-4.0 async-await


【解决方案1】:

您可以使用此解决方法在 .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 文档。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-14
    • 2012-10-24
    • 2012-06-23
    • 2016-11-15
    • 2010-10-16
    • 2012-11-27
    相关资源
    最近更新 更多