使用studio 2012构建后的任务序列化问题

本文关键字:任务 序列化 问题 studio 2012 构建 使用 | 更新日期: 2023-09-27 17:50:27

安装studio 2012后,构建一个针对框架4.0的应用程序。我得到错误:

Type 'System.Threading.Tasks.Task' cannot be serialized. 
Consider marking it with the DataContractAttribute attribute, and marking all of its members you want serialized with ....
我已经使用svcutil重新生成了服务引用。有没有办法指定所有异步的东西都从引用中排除?

?

使用studio 2012构建后的任务序列化问题

据我所知,你不能在。net 4.0上使用基于WCF任务的异步模式(你可以,但你需要安装Visual Studio 2012的Async Targeting Pack),你需要升级到。net 4.5才能让它工作。

我怀疑你在Visual studio 2010上使用了某种扩展(如AsynCTP)。

在这里你可以看到每个框架版本都支持哪些异步模式:

  • 同步和异步操作。. NET Framework 4

  • 同步和异步操作。. NET Framework 4.5

我不明白为什么,但似乎在一些构建环境中,您需要在svcutil命令行中添加一个开关/syncOnly,以便在升级到Visual Studio 2012后为您的服务生成接口。奇怪的是,如果我用Visual Studio 2012在我的桌面上本地构建和运行,我将所有的异步方法添加到界面中,一切都运行良好。但是,如果我在单独的构建机器上构建,然后在第三台机器上运行,那么我就会得到您所描述的错误。当我像http://www.aspdotnethelp.com/a/d/type-system-threading-tasks-task1system-string-cannot-be-serialized-error-in-wcf-236.aspx

所描述的那样将/syncOnly添加到命令行时,错误就消失了

这将导致不生成Async接口成员。

我也见过包含异步方法会导致不同的错误:

标记为IsOneWay=true的操作不能声明输出参数、引用参数或返回值

我怀疑原因在于使用。net 4.5工具来构建。net 4.0应用程序。由于这些工具是生成代码而不是编译代码,因此它们所针对的。net版本在输出中并不强制执行。然后,当你在一个针对。net 4.0的应用程序中使用。net 4.5的代码时,一些行为就不同步了。