Subcripciones a eventos de Team Foundation Server con facilidad

Una de las múltiples vías que tenemos para extender e integrar nuestro TFS con otras aplicaciones existentes en nuestra organización es poner un servicio web a escuchar los eventos que se producen en nuestro TFS. Podemos escuchar eventos relacionados con ‘work items’, el gestor de fuentes o el servicio de builds. Básicamente lo que tenemos que hacer es crear un servicio que exponga un método con la siguiente firma:

    [WebMethod]

    [SoapDocumentMethod("http://schemas.microsoft.com/TeamFoundation/2005/06/Services/Notification/03/Notify", RequestNamespace = "http://schemas.microsoft.com/TeamFoundation/2005/06/Services/Notification/03")]

    public void Notify(string eventXml, string tfsIdentityXml)

Luego registraremos la url en la que el servicio escucha las notificaciones de TFS utilzando el clásico BisSuscribe.exe o, para aquellos que le tengan más miedo a la línea de comandos, usando Team Fondation Event Subscription Tool.

Nada que no podáis leer en cientos de sitios… la película se complica cuando, una vez subscrito el servicio, tenemos que acceder a la información sobre el evento que se a producido, que recibimos en ¡un string que contiene xml!. Pues bien, la buena noticia es que los esquemas de los eventos son públicos (se pueden encontrar en el directorio Web ServicesServicesv1.0Transforms dentro del directorio de instalación de nuestro TFS (tìpicamente C:Program FilesMicrosoft Visual Studio 2008 Team Foundation Server). Así podemos usar XSD.exe para crear una clase a partir del esquema, esta clase nos permitirá deserializar un objeto a partir del string XML que recibimos en los parámetros eventXml y  tfsIdentityXml…

Vamos que es un proceso factible pero tedioso. Menos mal que Howard van Ronijen se ha molestado en crear una plantilla de proyecto que nos facilita la labor. Podéis descargarla desde su sitio en Codeplex.

TFS Notification Web Service Project Template

Una vez instalada esta plantilla en nuestro Visual Studio, podemos crear el esqueleto de un nuevo proyecto orientado a consumir los diferentes eventos que TFS expone y además ¡se a molestado en crear las clases para deserializar el XML de notificación de todos las posibles notificaciones! Así es facilísimo interpretar la información que TFS nos envia en la notificación del evento, tal y como podéis ver en el siguiente ejemplo:

    [WebMethod]

    [SoapDocumentMethod("http://schemas.microsoft.com/TeamFoundation/2005/06/Services/Notification/03/Notify", RequestNamespace = "http://schemas.microsoft.com/TeamFoundation/2005/06/Services/Notification/03")]

    public void Notify(string eventXml, string tfsIdentityXml)

    {

        BuildCompletionEvent buildCompletionEvent = this.CreateInstance<BuildCompletionEvent>(eventXml);

        TFSIdentity tfsIdentity = this.CreateInstance<TFSIdentity>(tfsIdentityXml);

    }

Por ejemplo para el evento generado cuando se completa una build contariamos con las siguientes clases para manejar la información recibida como string XML en los parámetros de evento:

TFS Event ClassDiagram 

Vamos, que no puede ser más simple consumir eventos de TFS. Lo que hagáis con ellos, queda a vuestra imaginación.

¡Un saludo!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *