.net, мыло, веб-сервисы, как переопределить сериализацию \ преобразование в веб-ссылке - PullRequest
0 голосов
/ 29 марта 2011

Я обращаюсь к стороннему веб-сервису, написанному на php. Служба wsdl добавлена ​​в качестве веб-ссылки в мой проект и в большинстве случаев работает нормально.

Теперь проблема, с которой я часто сталкиваюсь, заключается в следующем:

Параметры в 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

Что я сейчас делаю, чтобы это исправить, так это изменим все типы параметров на строковые, чтобы они не выдавали ошибок на пустых элементах. Мне вообще не нравится это решение, поэтому мне было интересно, могу ли я как-то переопределить это, чтобы, когда элемент пуст, я мог просто заполнить 0 для int и false для bool.

Есть предложения?

1 Ответ

0 голосов
/ 29 марта 2011

Самое простое решение - сделать локальную копию WSDL, внести необходимые изменения и затем вызвать ее.Вы можете попытаться придумать и написать сценарии, которые делают это динамически, но вы, вероятно, требуете больше хлопот, чем стоит.

...