C# 如何访问在TFS服务器上下文中运行时激发的事件的内容?
我已经为TFS 2012创建了一个自定义事件处理程序,它在每次“工作项”更改时触发一个事件。我遵循了各种示例,发现以下代码可用于TFS 2012: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) };
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在发生特定类型的事件时调用它:
要做到这一点,您需要在上面的事件处理程序代码中“托管”您自己的web服务端点,并让您的客户端连接到该端点。我可以看到您可能会遇到许多问题,但是如果您不想进行投票,并且您无法让TFS在本地盒子上发射肥皂,那么您将别无选择。使用NotificationEventArgs。好的,谢谢!星期一我再试一次。如果我不能让它工作,我将编写自己的方法来比较服务器值和本地值,就像我在帮助台上做的那样。