2016-04-13 2 views
1

фона:

У меня есть на помещения TFS 2015 Update 1 сервер. В новом стиле построения TFS строятся капли, выполненные через сетевой ресурс are not deleted when the build is deleted из-за истечения срока хранения политик хранения. Наша настройка не может использовать сбросы на основе сервера, и мы должны использовать сетевые сокращения.Как получить уведомление о BuildDestroyedEvent

Как работа, я пытаюсь написать службу, которая будет уведомляться, когда сборка истекает и удаляется, и затем она может удалить связанный с ней общий сетевой ресурс.

Выпуск:

я обнаружил .NET TFS client libraries, в пакете Microsoft.TeamFoundationServer.Client NuGet есть Microsoft.TeamFoundation.Build.WebApi.Events.BuildDestroyedEvent класс, который выглядит точно так же, как то, что мне нужно. Однако я не могу понять, как «подписаться» на это событие.

Я нашел a good tutorial с использованием API Microsoft.TeamFoundationServer.ExtendedClient, который показывает подписку на WorkItemChangedEvent с веб-обратным вызовом. Однако, когда я пытался установить BuildDestroyedEvent, я получаю сообщение об ошибке.

const string collectionUri = "https://tfs.example.com:8081/tfs/MyCollection"; 
static void Main(string[] args) 
{ 
    using (TfsTeamProjectCollection tpc = new TfsTeamProjectCollection(new Uri(collectionUri))) 
    { 
     tpc.Authenticate(); 
     tpc.EnsureAuthenticated(); 

     var eventService = tpc.GetService<IEventService>(); 

     DeliveryPreference del = new DeliveryPreference(); 
     del.Address = "http://srchamberlain.example.com/TestWebApp/api/destroyEventSink"; 
     del.Schedule = DeliverySchedule.Immediate; 
     del.Type = DeliveryType.Soap; 


     var id = eventService.SubscribeEvent("BuildDestroyedEvent", "", del); 
     Console.WriteLine(id); 
    } 

    Console.ReadLine(); 
} 

Я получаю ошибку на SubscribeEvent линии

 
Microsoft.TeamFoundation.Framework.Client.TeamFoundationServiceException was unhandled 
    ErrorCode=0 
    EventId=3000 
    HResult=-2146232832 
    IsRemoteException=true 
    LogException=false 
    Message=Event type BuildDestroyedEvent does not exist. 
    ReportException=false 
    Source=Microsoft.TeamFoundation.Client 
    StackTrace: 
     at Microsoft.TeamFoundation.Client.Channels.TfsHttpClientBase.HandleReply(TfsClientOperation operation, TfsMessage message, Object[]& outputs) 
     at Microsoft.TeamFoundation.Client.Channels.TfsHttpClientBase.Invoke(TfsClientOperation operation, Object[] parameters, TimeSpan timeout, Object[]& outputs) 
     at Microsoft.TeamFoundation.Client.Channels.TfsHttpClientBase.Invoke(TfsClientOperation operation, Object[] parameters, Object[]& outputs) 
     at Microsoft.TeamFoundation.Client.Channels.TfsHttpClientBase.Invoke(TfsClientOperation operation, Object[] parameters) 
     at Microsoft.TeamFoundation.Framework.Client.EventWebService.SubscribeEvent(String userId, String eventType, String filterExpression, DeliveryPreference preferences, String projectName) 
     at Microsoft.TeamFoundation.Framework.Client.TeamFoundationEventService.SubscribeEvent(String eventType, String filterExpression, DeliveryPreference preferences) 
     at SandboxConsole.Program.Main(String[] args) in D:\Code\SandboxConsole\SandboxConsole\Program.cs:line 33 
     at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) 
     at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) 
     at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 
     at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
     at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
     at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
     at System.Threading.ThreadHelper.ThreadStart() 
    InnerException: 
     Actor="" 
     HResult=-2146233087 
     Lang=en 
     Message=Event type BuildDestroyedEvent does not exist. 
     Node="" 
     Role="" 
     InnerException: 

Вопрос:

Что такое правильный способ получить уведомление о Microsoft.TeamFoundation.Build.WebApi.Events.BuildDestroyedEvent стрельбы?

+1

Хотите удалить сборку в реальном времени? Если нет, ежедневная работа, которая просто делает вызов для сборки, чтобы проверить, удалены они или нет, будет работать. –

+0

Хорошая идея, я думаю, что буду использовать это как план резервного копирования –

ответ

0
  1. collectionUri для VSTS всегда https://xxx.visualstudio.com/DefaultCollection, другой формат не может быть распознан.

  2. Учебники предназначены только для TFS, а не для VSTS. Поскольку подписка на события является плагином на стороне сервера, но размещен VSTS, он не может запускать подписку на стороне сервера. Подписки в формате .Net не поддерживаются в VSTS.

  3. VSTS теперь поддерживает create a service hooks subscription, но поддерживаемые события не включают BuildDestroyedEvent.

Поддерживаемые события:

  • сборка завершена
  • код толкнули (для командных проектов Git) запрос
  • тянуть создать или обновлен (для командных проектов Git)
  • код проверяется (TFVC)
  • рабочий элемент создан, обновлен, удален, восстановлен или прокомментирован
  • сообщение отправлено в номер команды

Итак, вы можете принять совет Харшила Лодхи в качестве обходного пути.

+0

Для точки 1 я запускаю TFS на месте, я пытаюсь подключиться к локально запущенному обновлению TFS 2015 1 (Мы планируем обновить до Update 2 this выходные). Кроме того, мне все же хотелось бы узнать, используя пакет NuGet 'Microsoft.TeamFoundationServer.Client', что такое« подписать »*** любому *** из событий в Microsoft.TeamFoundation.Build.WebApi.Events 'пространство имен. –

+0

Я думаю, что для подписки доступны только те события, которые доступны как часть сервисных крючков. Вы можете перейти к настройкам на веб-интерфейсе веб-интерфейса TFS и вкладке «Крюки обслуживания», чтобы просмотреть события. –

+0

Что касается вещей, которые действуют как плагины, а не внешние службы, не получают ли они больше доступа? «Служба», которую я пишу, не обязательно должна быть внешней службой, я могу написать ее как плагин для TFS, я просто не могу понять, как получить доступ к информации. –

Смежные вопросы