Come ricevere notifiche automatiche da VSO in un proprio web service

Per chi non lo sapesse, TFS possiede un sistema di sottoscrizione eventi automatica che vi permette di scrivere un vostro web service che verrà notificato da TFS all’accadere di determinati eventi. Nella versione on-premise l’impostazione di questa notifica avviene tramite il programma BisSubscribe.exe. Dato che BisSubscribe.exe viene installato con TFS Server, molte persone pensano che questa possibilità non esista con Visual Studio Online, ma in realtà anche VSO possiede lo stesso sistema di notifiche.

Per ricevere notifiche è necessario creare un web service WCF con una sola funzione.

[sourcecode language='csharp'  padlinenumbers='true']
    [ServiceContract(Namespace = "http://schemas.microsoft.com/TeamFoundation/2005/06/Services/Notification/03")]
    public interface INotificationService
    {
        [OperationContract(Action = "http://schemas.microsoft.com/TeamFoundation/2005/06/Services/Notification/03/Notify")]
        [XmlSerializerFormat(Style = OperationFormatStyle.Document)]
        void Notify(string eventXml, string tfsIdentityXml);
    }
[/sourcecode]

La semplicità di questa interfaccia garantisce la compatibilità con tutte le versioni future. In pratica il contratto del servizio rimane sempre eguale, una unica funzione con due parametri, il primo contiene l’XML che indica i dettagli dell’evento, il secondo un XML che indica invece l’identità del server che ha notificato l’evento.

Una volta creata l’interfaccia INotificationService non rimane altro da fare che creare una classe concreta che la implementi e che conterrà la vostra logica. L’utilità di un servizio di notifica è quella di poter aggiungere delle logiche personalizzate a TFS / VSO senza dovere scrivere plugin lato server (operazione invasiva per TFS on-premise e non disponibile per VSO). Ad esempio potreste scrivere una logica che intercetti il cambio delle ore rimanenti, ore stimate, ed ore effettuate per un task del template Agile, ed andare ad aggiornare la User Story padre per fare il rollup dei valori, etc etc.

Una volta implementata la logica desiderata non dovete fare altro che esporre questo servizio in un Endpoint che sia pubblicamente accessibile, Es. Una macchina virtuale di Azure.

image

A questo punto, se avete una installazione di TFS on-premise potete utilizzare direttamente l’utility BisSubscribe.exe, ma in realtà potete semplicemente impostare un alert SOAP nei settings del Team Project, operazione che può essere fatta anche nel proprio account VSO. Ad esempio nella figura sottostante ho impostato un alert per il cambiamento di qualsiasi work item in uno specifico team project.

SNAGHTMLf286e

E’ sufficiente impostare il tipo di messaggio a SOAP e poi indicare l’indirizzo pubblico del proprio servizio nel Send To.

Una volta salvato l’alert, ad ogni cambio di work item, il vostro servizio verrà notificato con un messaggio che contiene tutte le informazioni desiderate.

Gian Maria.

Comments are closed.