409 ответ на конфликт с использованием TFS 2015 REST API для построения очереди
У меня есть приложение, которое инкапсулирует взаимодействие с TFS REST API, чтобы поставить в очередь сборку. Приложение просто отправляет требуемый json в API, и оно работало в течение нескольких месяцев, пока внезапно не начало возвращать 409 - конфликт.
System.Net.WebException: удаленный сервер возвратил ошибку: (409) Конфликт. ( https://tfs2015/tfs/spf/SPF/_apis/build/builds?api-version=2.0: {"определение":{"id":190},"параметры": "{}"})
w3.org определите http-код 409 как:
Запрос не может быть выполнен из-за конфликта с текущим состоянием ресурса. Этот код разрешен только в ситуациях, когда ожидается, что пользователь сможет разрешить конфликт и повторно отправить запрос. Тело ответа ДОЛЖНО содержать достаточно информации, чтобы пользователь мог распознать источник конфликта. В идеале, объект ответа должен включать в себя достаточно информации, чтобы пользователь или пользовательский агент мог решить проблему; Однако это может быть невозможно и не требуется.
409 тоже не уйдут - простая повторная попытка не удалась. Даже весь метод "пытался ли ты снова выключить его" при перезапуске серверов сборки не помог.
1 ответ
Как выясняется, "конфликт" в этом на самом деле не какая-то странная проблема параллелизма, а состояние, в котором требования сборки не могут быть удовлетворены.
По существу, определение сборки, находящееся в очереди, требовало "PowerShell = 4". Сборки начали давать 409 сразу после обновления серверов сборки до PowerShell 5.
В этом случае 409 означало, что требования к сборке не могли быть удовлетворены ни одним из агентов сборки в пуле.
Изменение определения сборки для использования PowerShell вместо конкретной версии PowerShell устранило проблему.
(Я мог бы решить это раньше, если бы мое приложение сбросило весь ответ на консоль, поэтому я буду обновлять его в ближайшем будущем).