I found this issue in TFS 2010 on live production server. Consider the following scenario. You are using Microsoft Team Foundation Server 2010 and you attempt to subscribe to an event (BuildStatusChangeEvent or BuildCompletionEvent, for example) using the BisSubscribe.exe command line tool.

 

 For example:

"C:\Program Files\Microsoft Team Foundation Server 2010\Tools\bissubscribe /eventType BuildCompletionEvent /address http://IIServer/TfsEventSubscriber/BuildStatusChangeEvent /deliveryType Soap /server http://TfsName:8080/Tfs /collection Projects

 

When this command is executed you receive the following error message: Failed to subscribe event: Event type BuildCompletionEvent does not exist.

 

Later we were able to find out that this s error occurs because both "/server" and "/collection" were specified at the same time.  As a result, the BisSubscribe.exe command line tool takes first option it encounters and uses it. In the example above the tool uses “/server” and starts to look for event types on that configuration level. Since currently there is no event available at that level it naturally throws an error.  

  

Hence to resolve this issue we did the correct usage of the commands as follows:

1.       If subscription is at server level then run the following command

 C:\Program Files\Microsoft Team Foundation Server 2010\Tools\bissubscribe /eventType BuildCompletionEvent /address http://IIServer/TfsEventSubscriber/BuildStatusChangeEvent /deliveryType Soap /server http://TfsName:8080/Tfs

2.       If subscription alert is declared at project collection level then run the command as follows:

C:\Program Files\Microsoft Team Foundation Server 2010\Tools\bissubscribe /eventType BuildCompletionEvent /address http://IIServer/TfsEventSubscriber/BuildStatusChangeEvent /deliveryType Soap /collection http://TfsName:8080/Tfs/ProjectCollectionName

In TFS 2010, the only acceptable value is complete Uri of TFS, e.g. http://TfsName:8080/Tfs or http://TfsName:8080/Tfs/ProjectCollectionName . By providing the name of the project collection, events can be scoped for that collection only. If any project collection name is not provided then it automatically sets it to Default Project Collection.

 

Author: Nitish Nagpal

Reviewed by: Wendell Phillips