使用SOAP Web服务时,在反序列化值类型时出错

时间:2009-07-09 22:14:56

标签: .net web-services soap xml-serialization wsdl

有人知道我如何解决网络服务响应问题吗? 当我从Web服务调用中获取我的soap消息时,我得到此错误“字符串''不是有效的AllXsd值”,只要它是一个值类型,如每个示例的日期时间。

我的代理类是使用wsdl.exe从wsdl生成的,wsdl似乎有效。 我在代理类中没有看到任何错误(生成指定的值,datetime可以为空)。

我已经尝试过netmon看到线上的肥皂信封,但一切看起来都很正常。

你能想到解决这个问题的其他方法吗?或者可能是关于这里发生了什么的线索?

4 个答案:

答案 0 :(得分:1)

您是否在网络服务上提供任何文档?您报告在使用日期时遇到此问题,请确认日期格式正确date.ToString("yyyy-MM-dd");或服务期望的任何内容。

答案 1 :(得分:1)

尝试Web Service Studio并使用该工具点击您的网络服务,看看它是否与您的客户端存在同样的问题。你可以收集一些线索。 Web服务是您的代码吗?如果是,您使用的是asmx还是WCF?你在使用DataContract序列化器或XmlSerializer吗?您是否尝试过重新生成客户端代理?

答案 2 :(得分:1)

好的,我发现了问题所在。

在SOAP中,有两种方法可以使元素为空:

要么缺少整个元素 或者使用参数xsi:nil =“true”且没有值

他们通过使用第一个选项修改消息来修复它。 从那时起,我能够毫无问题地反序列化。

感谢您的回答。

答案 3 :(得分:0)

我的SOAP请求因为xsi:nil="true"事件而返回BadRequest 修复它的原因是将它添加到SOAP信封的顶部:

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

例如:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://www.blahblahblah.com/myobjectdefinition" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

我不知道为什么SoapUI没有产生这一点,但无论如何它为我修复了它。