.net,soap,web services,如何覆盖Web引用中的序列化\转换

时间:2011-03-29 12:27:46

标签: .net web-services soap wsdl

我正在访问用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。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

最简单的解决方案是创建WSDL的本地副本,进行必要的更改然后调用它。您可以尝试动画并编写动态执行此操作的脚本,但您可能会遇到比其价值更多的麻烦。