我们有一个 WCF / ASP.NET 托管的 Web 服务。服务契约中的数据类型使用 XSD.exe 生成的类型,因此使用XmlSerialization
属性进行修饰。我们使用 SvcUtil 为它创建了一个客户端,包括使用/ser:XmlSerializer
参数。工作了很多年。
我们刚刚升级了构建脚本以使用 VS 2012 和 v 8.0A Windows/.NET SDK NETFX 4.0 工具版本的 SvcUtil.exe (v 4.0.30319.17929)。
当我们的客户端(使用 VS 2012 和新的 8.0A SvcUtil 构建)尝试调用 WCF 服务时,我们现在看到一条奇怪的错误消息:
Type 'System.Threading.Tasks.Task1[MyNamespace.MyClient.MyDataStructure]' cannot be serialized. Consider marking it with the DataContractAttribute attribute, and marking all of its members you want serialized with the DataMemberAttribute attribute. If the type is a collection, consider marking it with the CollectionDataContractAttribute. See the Microsoft .NET Framework documentation for other supported types.
这个错误阻止了我们的应用程序能够调用 WCF 服务,我们被卡住了。
我注意到我们没有将参数传递给 SvcUtil for /async
. 我还注意到 .NET SDK 8.0A (v 4.0.30319.17929) 的 SvcUtil 帮助表明默认设置为generate synchronous and task-based asynchronous method signatures.
Is there some built-in disconnect between System.Threading.Task
and XmlSerializer
?
关于我们如何防止运行时以某种方式认为我们正在使用的DataContractSerialization
建议XmlSerialization
?