фона:
У меня есть на помещения 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
стрельбы?
Хотите удалить сборку в реальном времени? Если нет, ежедневная работа, которая просто делает вызов для сборки, чтобы проверить, удалены они или нет, будет работать. –
Хорошая идея, я думаю, что буду использовать это как план резервного копирования –