与C#中的web服务交谈时出现问题:XmlChoiceIdentifierAT致敬在Items中无效

本文关键字:致敬 XmlChoiceIdentifierAT Items 无效 问题 web 中的 服务 交谈 | 更新日期: 2023-09-27 17:57:57

有一个我无法控制的WSDL Web服务,我遇到了问题;我可以使用soapUI和AddServiceReference->advanced->AddWebReference与此服务交互,而不会出现任何问题。

然而,当我尝试使用标准的添加服务引用方法(添加服务引用,使用wsdl.exe中生成的代码进行连接)与它交谈时,我会得到以下错误:

XmlSerializer特性System.Xml.Serialization.XmlChoiceIdentifierAttribute不是在项中有效。只有XmlElement、XmlArray、XmlArrayItem、XmlAnyAttribute和当IsWrapped为true时,支持XmlAnyElement属性。

描述:在执行当前web期间发生未处理的异常要求请查看堆栈跟踪以了解有关错误和位置的更多信息它起源于代码。

异常详细信息:System.InvalidOperationException:XmlSerializer特性System.Xml.Serialization.XmlChoiceIdentifierAttribute在项中无效。只有XmlElement、XmlArray、XmlArrayItem、XmlAnyAttribute和XmlAnyElement属性为当IsWrapped为true时支持。

我读到一些东西说Java和.NET之间存在SOAP不兼容,但四处搜索几乎找不到有这个问题的人,这让我觉得我一定做错了什么?

与C#中的web服务交谈时出现问题:XmlChoiceIdentifierAT致敬在Items中无效

发生的情况是DataContractSerializer(WCF的默认值)无法处理架构(这在非WCF-WCF场景中很常见),因此它"回退"并生成使用XmlSerializer的代理。生成用于XmlSerializer的代理的"回退"机制可能没有以与Add Web引用使用的直接到XmlSerializer方法一致的方式生成代理。

当您转到"高级->添加Web引用"时,您手动告诉Visual Studio使用一种meechanism,该meechanim直接生成使用XmlSerializer而不是使用回退机制的代理。