Какая правильная кодировка логического значения в сообщении SOAP?

Мы создали веб-службу в VB.NET против файла WSDL, предоставленного нам нашим клиентом.

В ходе тестирования наш клиент поднял проблему, заявив, что XML, созданный нашей веб-службой, использует "true" и "false" для логических значений, а не "1" и "0". Кроме того, они предполагают, что из-за этого наша реализация "нарушена".

У меня создалось впечатление, что "true/false" и "1/0" в этом контексте взаимозаменяемы?

В любом случае, вся сериализация XML обрабатывается платформой .NET, а не нашим кодом, поэтому я предполагаю, что у меня мало шансов ее изменить?

Может ли кто-нибудь указать мне какую-нибудь документацию, которая либо поддерживает мою историю, либо доказывает, что я ошибаюсь? Если я ошибаюсь, знает ли кто-нибудь, как я могу изменить это поведение?

Спасибо заранее...

Ответ 1

Из SOAP spec: 'логические лексические формы "1" и "true" взаимозаменяемы.'

Не так много, чтобы сказать, действительно.

Ответ 2

Не связанный с WSDL, а связанный с XML: клиент однажды заявил, что не может читать наши XML файлы и настаивал на том, что мы будем генерировать XML файлы в соответствии со стандартом. К сожалению, их стандарт отличался от официального стандарта. Например, они не могли разобрать комментарии, были проблемы с заголовком XML, и они ожидали, что XML будет хорошо отступать от строк после каждого элемента. Зачем? Потому что они написали свой собственный синтаксический анализатор XML, который не смог следовать истинному стандарту.
Поскольку наше программное обеспечение также используется другими клиентами, мы сначала хотели отправить их "The Finger" и просто позволить им исчезнуть тихо. Но один человек из маркетинга нашел более приятное решение, и один из наших разработчиков был отправлен этому клиенту, чтобы дать дополнительные рекомендации относительно правильного использования XML. Мы обучили клиента, который вдруг понял, что им не нужно писать собственный парсер. Мы помогли им улучшить свою собственную базу кода и сделали их вполне счастливыми, так как мы решили проблему, обучая их. И все это за небольшую дополнительную плату, так что маркетинг тоже был счастлив.:-)

Однако есть альтернатива! Замените булевы вашими перечислениями. Например, да/нет или что-то подобное. Преимущество состоит в том, что вы можете затем расширить эти перечисления с дополнительными значениями, такими как yes/no/maybe or even yes/no/filenotfound...
Тем не менее, булевы часто предпочтительнее и чтобы сообщения SOAP были доступны для человека, вам лучше использовать true/false, так как люди склонны ошибаться, когда вы используете 1/0. Зачем? Простой, 1 верно? Или ложь? В некоторых языках программирования -1 означает true. А на более старых языках 1 означает" ложь ". (Потому что на этих языках логическое значение было своего рода битом ошибки, который, если значение-равно 1, указывает на ошибку.)
Чтение должно означать, что вы должны предпочесть использовать true/false или в конечном итоге обсуждая, почему 1 означает истину...

Ответ 3

Ваши варианты:

  • Скажите клиенту, что вы правы (что вы), и что true и false являются вполне допустимыми булевыми значениями в SOAP. А потом разобраться с сердитым клиентом.

  • Измените свои логические свойства на ints.

Я бы пошел с №2 сам, просто для гармонии всего этого.