Какова правильная кодировка логического значения в сообщении SOAP? - PullRequest
12 голосов
/ 01 ноября 2010

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

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

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

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

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

Заранее спасибо ...

Ответы [ 3 ]

13 голосов
/ 01 ноября 2010

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

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

3 голосов
/ 01 ноября 2010

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

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

2 голосов
/ 01 ноября 2010

Ваш выбор:

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

  2. Измените ваши логические свойства на целые.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...