El servicio de notificaciones de Team Foundation Server

Una característica de extensibilidad de Team Foundation Server que puede resultar sumamente útil es la posibilidad de subscribirse a eventos que puedan resultar de nuestro interés, y actuar en respuesta a ellos. El API de Team Foundation Server que nos proporciona esta funcionalidad se llama “Team Foundation Eventing Service”  y podéis encontrar más información sobre ella dentro del SDK de Visual Studio 2005, en un documento llamado “Team Foundation Eventing Service.doc”


Básicamente este API nos permite recibir notificaciones, bien mediante un correo electrónico (End-user delivery) o bien mediante la implementación de un callback SOAP (Web service listening). En este post voy ha hablar de esta segunda posibilidad. Otras posibilidades que permite el servicio de eventos, es registrar nuestros propios eventos y nuestras propias plantillas de correo, temas que no cubro en este post.


Bajo las palabras callback SOAP o “Web service listening” lo único que se oculta es que debemos implementar un servicio web que será invocado por el Team Foundation Eventing Service cuando tenga algún evento para el que hayamos mostrado nuestro interés estableciendo una subscripción al mismo.


La primera parte, implementar el callback SOAP pasa por implementar un servicio que con la siguiente firma:


[SoapDocumentMethod(Action = «http://schemas.microsoft.com/TeamFoundation/2005/06/Services/Notification/02/Notify«,  RequestNamespace=»http://schemas.microsoft.com/TeamFoundation/2005/06/Services/Notification/02«
)]
[WebMethod]
public void Notify(string eventXml, string tfsIdentityXml)
{
  …
}


Cuando se produzca un evento, se invocará a este servicio web, y recibiremos la información sobre el evento y sobre el causante del mismo en sus parámetros. Lo que hagamos con esa información depende de nuestras necesidades, el ejemplo más típico es realizar integración continua.


La segunda parte del problema es subscribirnos a los eventos. Para ello lo primero es conocer a que eventos nos podemos subscribir:

AclChangedEvent
BranchMovedEvent 
BuildCompletionEvent
BuildStatusChangedEvent 
CheckinEvent 
CommonStructureChangedEvent 
DataChangedEvent
IdentityChangedEvent 
IdentityCreatedEvent
IdentityDeletedEvent
MembershipChangedEvent 
NodeCreatedEvent 
NodePropertiesChangedEvent 
NodeRenamedEvent 
NodesDeletedEvent 
ProjectCreatedEvent
ProjectDeletedEvent 
WorkItemChangedEvent


Los nombres son toda la información que ahora mismo hay disponible sobre estos eventos. Además conviene saber que el uso de algunos de ellos no está recomendado.

Para subscribirnos a estos eventos tenemos que utilizar la herramienta BisSuscribe, que se encuentra en %ProgramFiles% Visual Studio 2005 SDK2006.03VisualStudioTeamSystemIntegrationUtilitiesEvent Subscription Tool



O utilizar el modelo de objetos de Team Foundation Server para realizar la subscripcion:


using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.Server;


// …


// Conectar a TFS
TeamFoundationServer tfsServer = TeamFoundationServerFactory.GetServer(“http://tfsserver:8080”)


// Obtener el servicio de eventos
IEventService eventService = (IEventService)tfsServer.GetService(typeof(IEventService));


// Establcer la opciones de entrega
DeliveryPreference pref = new DeliveryPreference();
pref.Schedule = DeliverySchedule.Immediate;
pref.Address = “url_del_callback_SOAP”
pref.Type = DeliveryType.Soap;


// Subcribirnos al evento
string user = “usuario”
string filter = String.Empty;
eventService.SubscribeEvent(userId, «nombre_de_evento», filter, pref).ToString();

Si decidís utilizar la posibilidad de extensión de Team Foundation Server comentada en este post, un recurso que os será de gran utilidad es la plantilla de proyecto que facilita la vida a la hora de crear los callback SOAP.

Deja un comentario

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