Bisubscribe.exe command fails in TFS 2010 while registering web services

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 https://IIServer/TfsEventSubscriber/BuildStatusChangeEvent /deliveryType Soap /server https://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 https://IIServer/TfsEventSubscriber/BuildStatusChangeEvent /deliveryType Soap /server https://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 https://IIServer/TfsEventSubscriber/BuildStatusChangeEvent /deliveryType Soap /collection https://TfsName:8080/Tfs/ProjectCollectionName

In TFS 2010, the only acceptable value is complete Uri of TFS, e.g. https://TfsName:8080/Tfs or https://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