Sin lugar a dudas uno de los huecos mas grandes de Silvelight 2.0 es la integración con servicios web, restricciones tales como basicHttpBinding, hacían la vida de un desarrollador menos divertida. Como sabemos el basicHttpBinding codifca los mensajes de respuesta como texto, lo cual es grandioso si uno de los alcances de nuestro proyecto es la interoperabilidad con SOAP 1.1 pero nefasto por la sobrecarga de información que se envía en la respuesta. Cuantos desarrolladores no dedicamos tiempo creando alguna forma para que la respuesta de un servicio web se redujera de tamaño?
Y he aquí una de las características, por la que rezaba todas las noches, que mas esperaba de la versión Beta 1 que fue anunciada en el pasado mix.
Binary Message Encoding
BinaryHttpBinding es la respuesta que Silverlight 3 trae a los desarrolladores, para reducir el overhead que se tenía en la codificación a texto. Este nuevo tipo de binding es, por alguna razón, implementado como un custom binding.
<bindings>
<customBinding>
<binding name="binaryHttpBinding">
<binaryMessageEncoding />
<httpTransport />
</binding>
</customBinding>
</bindings>
<endpoint address="" binding="customBinding" bindingConfiguration="binaryHttpBinding" contract="ServiceContract" />
El gran incremento en performance que trae este nuevo tipo de binding, seguramente repercutirá en su utilización como default binding, y relegaremos el basicHttpBinding en los escenarios en los que sea obligatorio la interoperabilidad.
Un modo de seguridad adicional
Silverlight 3 introduce un nuevo modo de seguridad, que ya conocíamos al utilizar otros clientes con WCF, TransportWithMessageCredential es casi la respuesta a nuestras plegarias, ya que nos permite enviar credenciales para autentificarnos con el servicio web que estamos consumiendo. La desventaja (porque siempre hay un “pero”?), es que las credenciales que enviemos para la autentificación, serán enviadas en cada mensaje, y el servicio validara las credenciales en una capa SOAP. Por lo anterior las credenciales viajaran en texto plano, por lo que será necesario utilizar HTTPS
<security mode="TransportWithMessageCredential">
SLsvcutil.exe
Por ultimo, aunque no menos importante, quiero hacer mención de la herramienta SLsvcutil.exe, que podremos utilizar desde la línea de comandos, la cual nos permitirá crear las clases proxy, para realizar peticiones a los servicios web. Recordemos que en la versión anterior de Silverlight solo podíamos hacer esto a través de Visual Studio | Add Service Reference.
Aquí pueden encontrar la documentación para utilizar esta herramienta.
Happy Coding!