开发者

Problem with Custom TFS Web Service Plugin

i'm not sure that what im going to do is the right so i first of all tell you my issue. I have TFS as Bugtracking System and another system for tracking the worktime. I want that if a workitem status changes the other system changes the status too.

What i did u开发者_如何学编程ntil now is the following.

I wrote a plugin for the TFS web service were i catch the 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;
        }

I droped the DLL in C:\Program Files\Microsoft Team Foundation Server 2010\Application Tier\Web Services\bin\Plugins but i looks like the extension is never called. So nothing apears in the event log.

But if i try to debug the service like in this post http://geekswithblogs.net/jakob/archive/2010/10/27/devleoping-and-debugging-server-side-event-handlers-in-tfs-2010.aspx i cant hook on the process. So debugging does not work. Why i cant debug the service? And is there a better way to do this?


Not sure if you fixed this but to me it looks like you are missing the Subscription method in the class.

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

Without this your plugin will never get hit thus you will be unable to debug.


To debug the w3wp.exe process, you need to be running Visual Studio as an administrator.

  • From the menu, select Debug > Attach to process (or Ctrl-Alt-P)
  • Select Show processes from all users and Show processes in all sessions.
  • Find the w3wp.exe process that corresponds to your TFS Application Pool, and attach to it.

I notice that you're using EventLog.WriteEntry() - have you registered the event source previously in your code? To avoid the registration (which requires admin permissions), you might try using the TFS logger:

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

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜