我有一个应用程序,它封装了与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也不会消失 - 简单的重试始终失败。甚至整个“你试过重新启动它”重新启动构建服务器的方法也没有帮助。
答案 0 :(得分:0)
事实证明,“冲突”实际上并不是某种奇怪的并发问题,而是一种无法满足构建需求的状态。
基本上,排队的构建定义需要“PowerShell = 4”。在构建服务器更新到PowerShell 5之后,构建立即开始提供409。
在这种情况下,409意味着池中的任何构建代理都无法满足构建需求。
将构建定义更改为需要PowerShell而不是特定版本的PowerShell修复了该问题。
(如果我的应用程序将整个响应转储到控制台,我可以尽早解决这个问题,所以我将在不久的将来更新它。)