【发布时间】:2011-03-29 12:27:45
【问题描述】:
我正在访问一个用 php 编写的第三方 Web 服务。 服务 wsdl 作为 Web 参考添加到我的项目中,并且大多数情况下都可以正常工作。
现在我经常遇到的一个问题是:
wsdl 中的参数定义了它们的类型(string、bool、int),但它们没有设置 nillable 属性。现在通常 int 或 bool 在响应中作为空元素返回,这会引发转换错误:
[FormatException: Input string was not in a correct format.]
System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal) +9594283
System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) +119
System.Xml.XmlConvert.ToInt32(String s) +43
Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReadernutritionService.Read6_NullableOfInt32(Boolean checkType) +125
我现在要解决的问题是将所有参数类型更改为字符串,这样它们就不会在空元素上抛出错误。我根本不喜欢这个解决方案,所以我想知道是否可以以某种方式覆盖它,以便当元素为空时,我可以简单地为 int 填写 0,为 bool 填写 false。
有什么建议吗?
【问题讨论】:
-
我很确定 WSDL 将是无效的 - 它确实允许可空(可空)类型,如果它没有指定,那么 WSDL 和服务不匹配。您可以修改 WSDL,或联系 Web 服务供应商
-
这就是整个问题,我无法访问 wsdl。他们不打算为我更改 wsdl,我已经很好地问过了。
标签: .net web-services soap wsdl