Pruebas de carga con WCF

En CodePlex hay una nueva herramienta para facilitar hacer pruebas de carga sobre aplicaciones WCF.


A partir de una traza de WCF y de un proxy o de una interfaz WCF, es capaz de generar un unittest que repite la misma secuencia de llamadas que se ha encontrando en la traza. El código es fácilmente modificable por lo que permite hacer cambios de una manera sencilla para adaptarse a nuestras pruebas.


Se genera código tanto para Visual Studio 2005 como 2008. En ambas versiones incluye una wizard para generar la traza y procesarla dentro de Visual Studio.


Las características principales son:



  • Replay of captured scenario in a unit test that can be included in a load test.

  • Support for the DataContractSerializer.

  • Support for message contracts.

  • Support for proxies generated using svcutil.

  • Support for clients that create proxies at run time from contract interfaces.

  • Supports calls to multiple services in a single scenario.

  • Supports multiple calls to the same service operation.

  • Filtering by SOAP action of which messages in the trace to replay.

  • Readable and modifiable code is generated.

  • Automatic association of trace message with proxy method (requires all operations to have a unique SOAP action).

  • Support for client and server side traces.

  • A command line tool for processing traces and generating code.

  • Visual Studio 2005/2008 integration (Team Developer, Team Test, Team Suite and for 2008 also Professional)) that can be used instead of the command line tool.

Podéis ver toda la información aquí.

[Artalde.NET] Ven a llorar con nosotros sobre….metodologías de desarrollo

Ya tenemos nuevo evento en Artalde!!, el grupo de usuarios del País Vasco.

Esta vez hemos preparado un evento abierto a la participación de todos los asistentes para hablar y comentar todas las dudas que surjan sobre el tema de metodologías de desarrollo.

Anteriormente ya preparamos un evento con la misma fórmula, un "Ven a llorar con nosotros sobre arquitectura", que gustó bastante, así que hemos vuelto a optar por esta misma fórmula.

Rodrigo Corral y yo mismo haremos una pequeña introducción a los principales aspectos de este tema con el fin de romper un poco el hielo y así todos los asistentes puedan animarse a comentar cualquier tema que consideren. Los asistentes podrán ser parte activa del evento y comentar todas sus experiencias.

El evento será el día 14 de Febrero en la Universidad de Deusto. La agenda es la siguiente:

  • 19:00 Registro
  • 19:15 Ven a llorar con nosotros sobre….metodologías de desarrollo.
    ¿Qué son las metodologías?
    ¿Realmente son necesarias?
    ¿Qué eso de las metodologías ágiles?
    ¿Cuál es la mejor?
    ¿Por dónde empiezo?…

Si estáis interesados en acudir al evento no olvidéis registraros aquí.

Ralentización en la carga de ensamblados firmados con un certificado

Hace poco hemos tenido un problema curioso en el grupo de desarrollo en el que trabajo actualmente.


Tenemos un servicio windows que sirve de host para servicios WCF. El servicio sin firmar nos funcionaba sin ningún problema pero los problemas empezaron cuando intentamos firmarlo digitalmente….con el ensamblado firmado no conseguíamos arrancar el servicio windows.


Constantemente obteníamos un error de timeout en el arranque. A esto hay que añadirle, que otros módulos hechos en C++ ( no manejado ) los firmábamos y nos funcionaban correctamente.


Aunque una vez explicado el problema puede tener su lógica, el tema nos llevó bastante tiempo y pruebas hasta que conseguimos dar con el problema, así que espero que si os encontráis en la misma situación os pueda ahorrar algo de tiempo.


La explicación es el siguiente….


Cuando el CLR carga un ensamblado firmado digitalmente con un certificado siempre intenta verificar la firma contra la entidad certificadora. El objetivo de esta comprobación es comprobar si el certificado está revocado o sigue siendo válido. 


El problema de esta comprobación es que supone un coste en el tiempo de carga del ensamblado y puede suponer varios segundos en la carga del mismo. La carga del ensamblado irá más lenta.


Con ensamblados .NET el CLR hace esta comprobación siempre. En cambio, el loader de Windows sólo hace esta comprobación en determinadas circunstancias, por ejemplo, con controles ActiveX. De aquí la diferencia entre nuestros módulos C++ y el ensamblado .NET.


Es importante comentar, que si la comprobación falla, el loader no rechaza el ensamblado y lo carga igualmente. Lo único que no se le dará son los permisos asociados al certificado en “PublisherIdentityPermission”.


En nuestro caso, la comprobación fallaba porque nuestra conexión a Internet es a través de un proxy autenticado, por lo que no se podía conectarse a la entidad certificadora. Esto provocaba que el servicio tardase demasiado y diese un error de timeout. Si la aplicación fuese una aplicación windows o de consola sólo hubiéramos notado que la carga del servicio iba más lenta.


A través del fichero de configuración podemos llegar a deshabilitar esta comprobación:



<configuration>



<runtime>


<generatePublisherEvidence enabled=”false“/>


</runtime>



</configuration>


Si queremos usar esta opción con una aplicación que use el framework 2.0 tendréis que descargaros y aplicar este hotfix.  Con la versión 3.0 SP1 o con la versión 3.5 del Framework no es necesario hacer nada adicional.