• TFS Event Subscriber (TFS事件预订管理) 无为而为


     

    TFS Event Subscriber 预订管理

    注意:代码是针对Beta3 Refresh测试的。

    微软TFS提供Event Subscriber,简单说就是TFS任何操作都可以触发一事件,这些事件包含CheckInWorkItemChangeBuildComplete等等。
        微软现在提供两种预订,一种是通过邮件的方式传递,一种是通过WebService。邮件方式设置简单,无需编码,只要简单设置即可,但是不够灵活,WebService需要编码,但是可以任意操作,非常灵活,如果你有LCS即时通讯服务器,你可以调用LCS API来发送即时消息给你的项目组员。
        这里主要描述WebService方式:
        这种方式包含两部分的内容:一个预订管理(Subscriber),一个是WebService接受端。
        微软的WebService方式目前的版本是没有界面可以操作的,所以要自己调用API来实现,(API还是比较简单的,不要看了API就怕)。


    运行的Subscriber:

    Subscriber
    的主要代码如下:

    public static int SubscribeEvent(string tfsServer, string userID, string eventType, string filterExpression, string deliveryAddress, string deliveryType, string deliverySchedule)

            


                TeamFoundationServer tfs 
    = TeamFoundationServerFactory.GetServer(tfsServer);

                IEventService eventService 
    = tfs.GetService(typeof(IEventService)) as IEventService;

                DeliveryPreference delivery 
    = new DeliveryPreference();

                delivery.Type 
    = deliveryType == "EmailHtml" ? DeliveryType.EmailHtml :

                    deliveryType 
    == "EmailPlaintext" ? DeliveryType.EmailPlaintext :

                    deliveryType 
    == "Soap" ? DeliveryType.Soap : DeliveryType.Soap ;

     

                delivery.Schedule 
    = deliverySchedule == "Daily" ? DeliverySchedule.Daily

                    : deliverySchedule 
    == "Immediate" ? DeliverySchedule.Immediate

                    : deliverySchedule 
    == "Weekly" ? DeliverySchedule.Weekly 

                    : DeliverySchedule.Immediate;

     

                delivery.Address 
    = deliveryAddress;

                
    int id = eventService.SubscribeEvent(userID, eventType, filterExpression, delivery);

                
    if (id < 0)

                    
    throw new ApplicationException("Unable to subscribe");

                
    return id;

            }


     


               WebService的主要代码如下:

     

    [SoapDocumentMethod("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)

        
    {

     

            
    string stylesheet = Server.MapPath("WorkItemChangedEvent.xsl");

            
    try

            
    {

                XmlDocument xdoc 
    = new XmlDocument();

                xdoc.LoadXml(eventXml);

                
    //xdoc.Save("c:\\test.xml"); //test

     

                XslCompiledTransform xsldoc 
    = new XslCompiledTransform();

                xsldoc.Load(stylesheet);

     

                XPathNavigator nav 
    = xdoc.CreateNavigator();

                nav.MoveToRoot();

     

                StringWriter writer 
    = new StringWriter();

     

                xsldoc.Transform(nav, 
    null, writer);

     

                
    //System.Diagnostics.EventLog.WriteEntry("TFS", eventhtml); //log

     

                
    string account = @"domain\test";

                
    string password = "test";

                
    string uri = "sip:test@domain.local";

                
    string strMsgHeader = null;

     

                
    string strDestURI = "cleo@domain.local";

                
    string strMsg = writer.ToString();

     

                CMS.LCSLib.RTCClass.SendMessage(account, password, uri, strMsgHeader, strMsg, strDestURI); 
    //

            }


            
    catch (Exception ex)

            
    {

     

                System.Diagnostics.EventLog.WriteEntry(
    "TFS", stylesheet + ex.ToString());

            }


    }


     

    测试:任意修改TFS任意项目的WorkItem,就可以接受的信息:

  • 相关阅读:
    Unity内生成深度贴图
    曲线细分
    Hermite插值
    查看静态库支持的CPU架构
    NLua引擎
    ImWindow
    Xenko Engine
    Fast Shadow Receiver
    2D色彩变换
    RVO
  • 原文地址:https://www.cnblogs.com/cleo/p/TFSEventSubscriber.html
Copyright © 2020-2023  润新知