我们的项目需要调用一些外部SOAP服务,这些服务都提供了WSDL数据,但其中很多并不是.NET服务(大部分是用Java编写的)。我们使用wsdl.exe工具生成了一些客户端代理。这个工具完成了它应该做的事情,为我们生成了可供调用的代理。
问题出现在我们尝试使用生成的代理调用服务方法时。为了记录日志,我们截获了所有SOAP请求,发现XML数据与WSDL架构中指定的不同。
例如,如果一个字段叫做“Name”,我们的代理将把它序列化为“nameField”。我猜这是因为名为“Name”的属性使用了名为“nameField”的支持字段。然而,服务端无法解释这种命名规则。
如果我们的ASMX代理使用旧的XmlSerializer,就不会出现这种情况。但由于某些原因,他们选择了DataContractSerializer,这完全搞乱了序列化,并破坏了客户端和服务之间的兼容性。
我的同事们已经开始手动构造XML数据并使用HttpWebRequest类发送请求了。我认为在2011年这是完全不可接受的,因为我们有自动生成代理的工具。
我的问题是:为什么会出现这种情况?为什么我们的代理使用DataContractSerializer,从而忽略了所有xml序列化属性?有没有办法强制它们再次使用XmlSerializer?
我们使用的是.NET 4.0。
问题出现在我们尝试使用生成的代理调用服务方法时。为了记录日志,我们截获了所有SOAP请求,发现XML数据与WSDL架构中指定的不同。
例如,如果一个字段叫做“Name”,我们的代理将把它序列化为“nameField”。我猜这是因为名为“Name”的属性使用了名为“nameField”的支持字段。然而,服务端无法解释这种命名规则。
如果我们的ASMX代理使用旧的XmlSerializer,就不会出现这种情况。但由于某些原因,他们选择了DataContractSerializer,这完全搞乱了序列化,并破坏了客户端和服务之间的兼容性。
我的同事们已经开始手动构造XML数据并使用HttpWebRequest类发送请求了。我认为在2011年这是完全不可接受的,因为我们有自动生成代理的工具。
我的问题是:为什么会出现这种情况?为什么我们的代理使用DataContractSerializer,从而忽略了所有xml序列化属性?有没有办法强制它们再次使用XmlSerializer?
我们使用的是.NET 4.0。