jueves, 9 de junio de 2011

WCF tools

Esta semana me he estado peleando he estado haciendo una integración con un proveedor de servicios para poder consumir su servicio una aplicación que estamos desarrollando. Lo primero que hemos de saber es que toda integración suele dar muchos dolores de cabeza ser un bonito reto.

En nuestro caso teníamos que consumir un servicio elaborado con java axis2. Este servicio tenia que tener seguridad a nivel de transporte (mediante certificado) y seguridad a nivel de mensaje (también mediante certificado), más concretamente en nuestro caso debía contener una firma.

Cuando hacemos este tipo de integraciones lo más normal es que no nos salga a la primera y que tengamos que ver que mensajes estamos enviando al servidor, ya que los errores que nos pueden devolver el servidor pueden ser poco intuitivos. Y he aquí donde realmente empieza el contenido de este post, o sea, que herramientas podemos usar para ver lo que estamos enviando.

Una de las primeras herramientas que podemos utilizar es el tracing de Windows Communication Foundation. En la siguiente página de las MSDN podemos ver como configurar esto:

http://msdn.microsoft.com/en-us/library/ms733025.aspx

En mi caso la configuración ha sido la siguiente:

Justo antes del cierre del tal configuration (</configuration>)

<system.diagnostics>
<sources>
<source name="System.ServiceModel"
switchValue="Information, ActivityTracing"
propagateActivity="true" >
<listeners>
<add name="xml"/>
</listeners>
</source>
<source name="System.ServiceModel.MessageLogging">
<listeners>
<add name="xml"/>
</listeners>
</source>
</sources>
<sharedListeners>
<add name="xml"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="C:\logs\CommandLineSTS.svclog" />
</sharedListeners>
</system.diagnostics>

Y esto dentro del nodo system.serviceModel:

<!-- add trace logging -->
<diagnostics wmiProviderEnabled="true">
<messageLogging
logEntireMessage="true"
logMalformedMessages="true"
logMessagesAtServiceLevel="true"
logMessagesAtTransportLevel="true"
maxMessagesToLog="3000"
/>
</diagnostics>

Otras herramientas que podemos usar para ver que se esa enviando son HTTP monitors, en mi caso he utilizado dos, destacando el último de los que menciono a continuación:

image

Otra de las cosas con las que nos entretendremos mucho es configurando nuestro service model a nivel de configuración o programándolo con código. Para ello nada mejor que las msdn y como punto de partida esta seria una buena página:

http://msdn.microsoft.com/en-us/library/ms733103.aspx

Tampoco podemos olvidar las herramientas de WCF que se nos ofrecen con nuestro visual studio, un resumen de ellas son las que indica la msdn en la siguiente página:

http://msdn.microsoft.com/en-us/library/ms732015(v=vs.90).aspx

Seguramente y debido a las peculiaridades de cada integración, no nos valdrá con las típicas configuraciones de bindings que nos ofrece el framework por defecto, es decir BasicHttpBinding o WSHttpBinding, entre otras, y tengamos que echar mano de custombindings, ahora bien no esta mal partir de uno de los bindings de los que disponemos, para poder hacer esto podemos convertir cualquiera de estos bindings a custom bindings utilizando por ejemplo una herramienta que expone en su blog un crack en la materia como es Yaron Naveh.

http://webservices20.blogspot.com/2009/08/bindingbox-convert-wcf-bindings.html

Sobre el tema de configuración, decir que antes de pensar en desarrollar nosotros una solución como dirian los anglosajones “from scratch”, mirar todas las posibilidades que nos ofrecen las configuraciones de los bindings, seguro que encontraremos alguna que satisface nuestras necesidades.

En caso de que nuestra solución sea muy compleja y no podamos obtenerla con lo que nos ofrece wcf out of the box, siempre podemos pensar en extender estas funcionalidades ya que wcf es un framework de comunicación altamente extensible. Por ejemplo, podemos crear un message inspector o un message encoder (derivando de la interfaz IClientMessageInspector o de la clase MessageEncoder, respectivamente). Para estas posibles extensiones que podamos hacer sobre WCF es interesante descargarnos los ejemplos que encontramos en la msdn, más concretamente en:

http://msdn.microsoft.com/en-us/library/ms751514(v=VS.90).aspx

Aquí podemos encontrar ejemplos divididos en las siguientes categorías:

  • Basic
  • Extensibility
  • Scenario
  • Setup
  • Tools

No hay comentarios: