C# 如何访问在TFS服务器上下文中运行时激发的事件的内容?

C# 如何访问在TFS服务器上下文中运行时激发的事件的内容?,c#,delegates,event-handling,C#,Delegates,Event Handling,我已经为TFS 2012创建了一个自定义事件处理程序,它在每次“工作项”更改时触发一个事件。我遵循了各种示例,发现以下代码可用于TFS 2012: public class WorkItemChangedEventHandler : ISubscriber { public Type[] SubscribedTypes() { return new[] { typeof(WorkItemChangedEvent) };

我已经为TFS 2012创建了一个自定义事件处理程序,它在每次“工作项”更改时触发一个事件。我遵循了各种示例,发现以下代码可用于TFS 2012:

public class WorkItemChangedEventHandler : ISubscriber
   {
        public Type[] SubscribedTypes()
          {
             return new[] { typeof(WorkItemChangedEvent) };
          }
          public EventNotificationStatus ProcessEvent(TeamFoundationRequestContext requestContext, NotificationType notificationType, object notificationEventArgs,
                                                      out int statusCode, out string statusMessage, out ExceptionPropertyCollection properties)
          {
             statusCode = 0;
             properties = null;
             statusMessage = String.Empty;
             try
             {
                if( notificationType == NotificationType.Notification && notificationEventArgs is WorkItemChangedEvent )
                {
                   var ev = notificationEventArgs as WorkItemChangedEvent;
                   EventLog.WriteEntry("WorkItemChangedEventHandler", "WorkItem " + ev.WorkItemTitle + " was modified");
                }
             }
             catch( Exception exception )
             {
                //must eat all exceptions or TFS will not load the plugin
             }
             return EventNotificationStatus.ActionPermitted;
          }
          public string Name
          {
             get { return "WorkItemChangedEventHandler"; }
          }
          public SubscriberPriority Priority
          {
             get { return SubscriberPriority.Normal; }
          }
       }
因此,虽然这段代码在TFS的/plugins目录中作为.dll安装时运行良好,但我仍然不知道如何从外部代码中获取事件的结果

我想通过TFS服务器API可以获得某种订阅,它允许我使用自定义事件处理程序(订阅者)订阅在TFS上下文下运行的事件,但我已经尝试了一周,但运气不好,所以现在我请求so社区发发发发慈悲

我所拥有的是一个服务,它连接到我们的帮助台API并读取错误记录,然后我将其转换为一个序列化的本地列表结构,以便在以后需要检查是否有任何更改时读取。然后,我使用TFSAPI更新相应的工作项,以便所有内容都同步

在应用程序的这一部分中,一切都正常工作,但问题是我还需要(由美国开发人员)对TFS所做的更改反映到帮助台Bug跟踪器中。 因此,我认为使用WorkItemChanged()事件来完成这项工作可以节省手动编码的时间,就像我在另一端所做的那样

我需要知道工作项上的哪些字段已更改,以使用新值更新BugTracker

有人知道如何做到这一点吗? 问题实际上归结为: 如何从控制台或服务应用程序订阅由上述编写的代码触发的事件

谢谢你的帮助


Chris

您听起来好像不是在寻找服务器端事件,而是在寻找SOAP事件,其中TFS将调用URL并发送包含所需数据的SOAP信封

您只需创建一个web服务,并让TFS在发生特定类型的事件时调用它:

但是,如果您无法从TFS服务器连接到控制台应用程序(通常发生在本地应用程序运行在您的计算机上而不是服务器上),您可以创建自己的使用双工服务的消息队列


要做到这一点,您需要在上面的事件处理程序代码中“托管”您自己的web服务端点,并让您的客户端连接到该端点。我可以看到您可能会遇到许多问题,但是如果您不想进行投票,并且您无法让TFS在本地盒子上发射肥皂,那么您将别无选择。

使用NotificationEventArgs。好的,谢谢!星期一我再试一次。如果我不能让它工作,我将编写自己的方法来比较服务器值和本地值,就像我在帮助台上做的那样。