Que WCF usa XML para enviar datos de forma binaria?!?!?!?

Wolas a todos

Tal vez hayaís tenido la oportunidad de empezar a pegaros con WCF, hacer un servicio, probar varios bindings, leer documentación... puede que hayaís leido por ahi (lo he visto ya en varias webs) que WCF utiliza XML como formato para la transmisión binaria.

Obviamente, la primera impresión que nos viene es de ... Horror! Pánico! Que burradaaaaaa!!

Tranquilidad, vamos a darle un voto de confianza al equipo de N personas que ha trabajado en el grupo de WCF y pensemos por un segundo que tal vez a alguno de esos desarrolladores/program managers/arquitectos.... se le ha ocurrido que pasar el stream a texto XML y luego serializarlo en binario no es lo que nosotros entendemos por sacar chispas al rendimiento :)

Realmente esas tres consonantes están presentes en la definición del formato de envio, pero no es texto XML pasado a binario. Es una versión binaria optimizada de un infoset XML (https://en.wikipedia.org/wiki/Infoset).

Tened en cuenta que SOAP no tiene porque implicar texto xml.............

   <paréntesis>

Sí, ya se que en la página del w3c pone que... All SOAP messages are encoded using XML (https://www.w3.org/TR/2000/NOTE-SOAP-20000508/#_Toc478383492) ..  vaya ganas que tenemos de poner vallas al campo. Recordemos que SOAP es... Simple Object Access Protocol, por qué tenemos que restringirnos a un único transporte para un protocolo!?!?

Entonces el protocolo hablar en castellano, solo es válido si utilizo el medio de transporte aire. Si utilizo el medio de transporte teléfono, o el transporte voz sobre ip, o lo grabo en un casette y luego lo escucho es swahili, no? :D

  </paréntesis>

........aunque se ha repetido hasta la saciedad que SOAP es un documento XML que blah, blah blah... pensemos un segundo en SOAP como un concepto abstracto...de este modo, veremos que SOAP simplemente describe una estructura de información formada por un conjunto de cabeceras y un stream como cuerpo, esto no tiene porque ser intrinseco a XML!!

Esto es a lo bruto, pero espero que refleje la idea...

 class envelope
 {
    Header[] headers;
    byte[]  body;
 }

Así tenemos información binaria preparada para ser intercambiada de acuerdo con el protocolo SOAP. La ventaja de independizar el formato de la codificación, es que mantenemos la manera de trabajar con los mensajes (mismo formato) independientemente de cómo sea su codificación(xml, binaria...).

 Por cierto, text/xml y binario son dos posibles formatos, no nos sorprendamos si luego llega el infoset XML MTOM optimizado, o se implementa el fast infoset en WCF

<paréntesis>
 Pero, no es lo mismo que el fast infoset??

 El concepto es el mismo, pero el fast infoset es una propuesta para un formato binario de infosets XML, mientras que el infoset binario XML de WCF es una implementación de ese concepto de la forma que el grupo de producto  han considerado más optimizada para aumentar el rendimiento entre los agentes.
  </paréntesis>

Espero que esto aclare alguna duda :)

Happy Hacking!