我不确定我要做什么是正确的,所以我首先告诉你我的问题。 我有TFS作为Bugtracking系统和另一个跟踪工作时间的系统。我希望如果工作项状态发生变化,其他系统也会改变状态。
到目前为止,我所做的是以下内容。
我为TFS Web服务编写了一个插件,我抓住了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)
{
WorkItemChangedEvent ev = notificationEventArgs as WorkItemChangedEvent;
EventLog.WriteEntry("WorkItemChangedEventHandler", "WorkItem " + ev.WorkItemTitle + " was modified");
}
}
catch (Exception)
{
}
return EventNotificationStatus.ActionPermitted;
}
我在C:\ Program Files \ Microsoft Team Foundation Server 2010 \ Application Tier \ Web Services \ bin \ Plugins中删除了DLL 但我看起来从未调用过扩展名。所以事件日志中没有任何内容。
但是,如果我尝试调试此帖中的服务http://geekswithblogs.net/jakob/archive/2010/10/27/devleoping-and-debugging-server-side-event-handlers-in-tfs-2010.aspx 我不能挂钩这个过程。所以调试不起作用。 为什么我不能调试服务?还有更好的方法吗?
答案 0 :(得分:5)
不确定您是否已修复此问题,但对我而言,您似乎缺少类中的订阅方法。
public Type[] SubscribedTypes()
{
return new Type[1] {typeof(WorkItemChangedEvent)};
}
如果没有这个,你的插件将永远不会受到影响,因此你将无法进行调试。
答案 1 :(得分:4)
要调试w3wp.exe进程,您需要以管理员身份运行Visual Studio。
我注意到您正在使用EventLog.WriteEntry() - 您是否已在代码中注册了事件源?要避免注册(需要管理员权限),您可以尝试使用TFS记录器:
TeamFoundationApplication.Log("WorkItem " + ev.WorkItemTitle + " was modified", 0, System.Diagnostics.EventLogEntryType.Information);