2010-11-01 10 views
10

Hemos producido un servicio web en VB.NET contra un archivo WSDL proporcionado por nuestro cliente.¿Cuál es la codificación correcta de un valor booleano en un mensaje SOAP?

En las pruebas, nuestro cliente ha planteado un problema quejándose de que el XML producido por nuestro servicio web usa 'verdadero' y 'falso' para los valores booleanos, no '1' y '0'. Además, están sugiriendo que nuestra implementación está "rota" debido a esto.

¿Tenía la impresión de que 'verdadero/falso' y '1/0' en este contexto eran intercambiables?

De cualquier manera, toda la serialización XML está siendo manejada por .NET Framework, no nuestro código, así que supongo que tengo pocas posibilidades de cambiarlo de todos modos?

¿Alguien puede indicarme alguna documentación que respalde mi historia o me demuestre que estoy equivocado? Si estoy equivocado, ¿alguien sabe cómo podría alterar este comportamiento?

Gracias de antemano ...

Respuesta

11

Desde el SOAP spec: 'las formas léxicas booleanos '1' y 'verdadero' son intercambiables.

No hay mucho más que decir, de verdad.

+0

Eso es lo que estaba buscando, gracias. –

2

Las opciones son:

  1. decirle al cliente que tienes razón (que se encuentra) y que true y false son valores booleanos perfectamente válidas en SOAP. Y luego tratar con un cliente enojado.

  2. Cambie sus propiedades booleanas a ints.

Me gustaría ir con el # 2, yo mismo, solo por la armonía de todo.

+0

Me gustaría ir con la opción 1, de lo contrario, otros clientes podrían quejarse de esperar verdadero/falso y recibir 0/1 en su lugar. Para empeorar las cosas, sin mirar hacia arriba: ¿1 significa verdadero o falso? :-) –

+0

Bueno, 1 significa verdadero, pero en VB.Net creo que -1 es cierto, por lo que su punto está bien tomado. – MusiGenesis

+0

Gracias por su respuesta. Desafortunadamente, tengo que conformarme con un WSDL publicado, así que el # 2 está fuera. ¡Parece que cada vez más # 1 es la forma en que voy a ir! –

3

No relacionado con WSDL pero relacionado con XML: un cliente una vez afirmó que no podía leer nuestros archivos XML e insistió en que generaríamos archivos XML de acuerdo con la norma. Desafortunadamente, su estándar era diferente del estándar oficial. Por ejemplo, no podían analizar los comentarios, tenían problemas con el encabezado XML y esperaban que el XML se sangrara muy bien con saltos de línea después de cada elemento. ¿Por qué? Debido a que escribieron su propio analizador XML, no pudo seguir el verdadero estándar.
Dado que nuestro software también es utilizado por otros clientes, primero queríamos enviarles "The Finger" y simplemente dejarlos desaparecer silenciosamente. Pero una persona de marketing encontró una mejor solución y uno de nuestros desarrolladores fue enviado a este cliente para brindarle asesoramiento adicional sobre el uso correcto de XML. Educamos al cliente, que de repente se dio cuenta de que no tenían que escribir su propio analizador. Les ayudamos a mejorar su propia base de códigos y los hicimos bastante felices ya que resolvimos el problema educándolos. Y todo esto por una pequeña tarifa adicional, por lo que el marketing también fue feliz. :-)

¡Sin embargo, existe una alternativa! Reemplace booleanos con sus propias enumeraciones. Por ejemplo, sí/no o algo similar. La ventaja es que puede expandir esas enumeraciones con valores adicionales como yes/no/maybe o incluso yes/no/filenotfound ...
Aún así, los booleanos son preferidos y para mantener los mensajes SOAP legibles por humanos, es mejor usar verdadero/falso ya que las personas tienden a cometer errores cuando usa 1/0. ¿Por qué? Simple, 1 es cierto? ¿O falso? En algunos lenguajes de programación, -1 significa verdadero. Y en los idiomas más antiguos, 1 significa falso. (Porque en esos idiomas, un booleano era una especie de bit de error, que si es igual a 1 indica un error.)
La legibilidad debería significar que usted debería preferir usar verdadero/falso o bien terminar discutiendo por qué 1 significa verdadero ...

+0

Gracias por su respuesta. Normalmente estaría a favor del enfoque de su agente de marketing, pero en este caso, ¡me temo que estoy demasiado abajo en la cadena alimenticia para ser escuchado! –

+0

En cuanto a cambiar a una enumeración, es una buena idea, excepto que tengo que conformarme con un WSDL publicado. ¡Seguiré luchando en la ruta política y veré dónde estoy! : o) –

Cuestiones relacionadas