WCF XmlSerialization以某种方式错误地解释为DataContract序列化-post VS 2012 Update1
我们有一个WCF/ASP.NET托管的web服务。服务契约中的数据类型使用XSD.exe生成的类型,因此使用WCF XmlSerialization以某种方式错误地解释为DataContract序列化-post VS 2012 Update1,wcf,xml-serialization,.net-4.5,datacontractserializer,svcutil.exe,Wcf,Xml Serialization,.net 4.5,Datacontractserializer,Svcutil.exe,我们有一个WCF/ASP.NET托管的web服务。服务契约中的数据类型使用XSD.exe生成的类型,因此使用XmlSerialization属性进行修饰。我们使用SvcUtil为它创建了一个客户端,包括使用/ser:XmlSerializer参数。我已经工作多年了 我们刚刚升级了构建脚本以使用VS 2012和V8.0A Windows/.NET SDK NETFX 4.0工具版本的SvcUtil.exe(V4.0.30319.17929) 现在,当我们的客户端(使用VS 2012和新的8.0A
XmlSerialization
属性进行修饰。我们使用SvcUtil为它创建了一个客户端,包括使用/ser:XmlSerializer
参数。我已经工作多年了
我们刚刚升级了构建脚本以使用VS 2012和V8.0A Windows/.NET SDK NETFX 4.0工具版本的SvcUtil.exe(V4.0.30319.17929)
现在,当我们的客户端(使用VS 2012和新的8.0A SvcUtil构建)尝试调用WCF服务时,我们看到一条奇怪的错误消息:
无法序列化类型“System.Threading.Tasks.Task1[MyNamespace.MyClient.MyDataStructure]”。考虑使用DATACONTractAttor属性对其进行标记,并标记要使用DATAMEMBAREATE属性序列化的所有成员。如果类型是集合,请考虑用CopyDATAcNoTractAttor标记它。有关其他受支持的类型,请参阅Microsoft.NET Framework文档。
这个错误使我们的应用程序无法调用WCF服务,我们被卡住了
我注意到,我们没有为/async
向SvcUtil传递参数。我还注意到,用于.NET SDK 8.0A(v 4.0.30319.17929)的SvcUtil帮助表明默认情况下是生成同步和基于任务的异步方法签名。在系统.Threading.task
和XmlSerializer
之间是否存在一些内置的断开连接
关于如何防止运行时在我们打算使用
XmlSerialization
时以某种方式认为我们在使用DataContractSerialization
?的建议,Microsoft给出了答案
简而言之,如果您打算使用.NET 4.5SvcUtil
构建,但目标是.NET 4运行时,则需要/syncOnly
。我从@vossad01中看到,我们可以添加/syncOnly
以防止生成系统.Threading.Tasks.Task1
类型包装构造。但是,如果我们希望使用基于任务的异步方法,该怎么办?