0

我有一个应用程序封装了与 TFS REST API 的交互,以便对构建进行排队。该应用程序只是将所需的 json 发送到 API,它工作了几个月,直到它突然开始返回 409 - 冲突。

System.Net.WebException:远程服务器返回错误:(409)冲突。( https://tfs2015/tfs/spf/SPF/_apis/build/builds?api-version=2.0 :{"definition":{"id":190},"parameters":"{}"})

w3.org 将 http 代码 409 定义为:

由于与资源的当前状态冲突,无法完成请求。仅在预期用户可能能够解决冲突并重新提交请求的情况下才允许使用此代码。响应正文应该包含足够的信息让用户识别冲突的来源。理想情况下,响应实体将包含足够的信息供用户或用户代理解决问题;但是,这可能是不可能的,也不是必需的。

409 也不会消失 - 简单的重试始终失败。即使是重新启动构建服务器的整个“您是否尝试过重新打开它”的方法也无济于事。

4

1 回答 1

1

事实证明,这里的“冲突”实际上并不是某种奇怪的并发问题,而是无法满足构建需求的状态。

基本上,排队的构建定义需要“PowerShell = 4”。在构建服务器更新到 PowerShell 5 后,构建立即开始提供 409。

在这种情况下,409 意味着池中的任何构建代理都无法满足构建需求。

将构建定义更改为需要 PowerShell 而不是特定版本的 PowerShell 解决了该问题。

(如果我的应用程序将整个响应转储到控制台,我可以更快地解决这个问题,所以我会在不久的将来更新它)。

于 2016-12-28T10:38:36.423 回答