自定义TFS Web服务插件的问题

时间:2011-02-14 12:45:22

标签: web-services tfs

我不确定我要做什么是正确的,所以我首先告诉你我的问题。 我有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 我不能挂钩这个过程。所以调试不起作用。 为什么我不能调试服务?还有更好的方法吗?

2 个答案:

答案 0 :(得分:5)

不确定您是否已修复此问题,但对我而言,您似乎缺少类中的订阅方法。

public Type[] SubscribedTypes()
{
    return new Type[1] {typeof(WorkItemChangedEvent)};
}

如果没有这个,你的插件将永远不会受到影响,因此你将无法进行调试。

答案 1 :(得分:4)

要调试w3wp.exe进程,您需要以管理员身份运行Visual Studio。

  • 从菜单中选择调试> 附加到流程(或Ctrl-Alt-P)
  • 选择显示所有用户的流程在所有会话中显示流程
  • 找到与您的TFS应用程序池对应的w3wp.exe进程,并附加到该进程。

我注意到您正在使用EventLog.WriteEntry() - 您是否已在代码中注册了事件源?要避免注册(需要管理员权限),您可以尝试使用TFS记录器:

TeamFoundationApplication.Log("WorkItem " + ev.WorkItemTitle + " was modified", 0, System.Diagnostics.EventLogEntryType.Information);