我有一个删除资源并创建新资源的脚本。它时不时地超时,我无法弄清楚原因。这似乎发生在我多次运行脚本时,但我无法获得明确的模式。我发现我的服务器还没有收到消息,因为还没有记录请求。
$old_values = Invoke-RestMethod -Uri $uri -Method Get
foreach($old_value in $old_values.result) {
Invoke-RestMethod -Uri "$uri&key=$old_value.id" -Method Delete
}
$new_value = Invoke-RestMethod -Uri "$uri" -Body "{}" -ContentType application/json -Method Post
有趣的是,当我直接从powershell运行Invoke-RestMethod调用时,偶尔会出现超时。我也和Fiddler一起跑了他们,从来没有超时。
[编辑]我一直在检查与netstat的连接。当命令挂起时,它们被列为ESTABLISHED。但我一直看到TIME_WAIT连接列在我的服务器上。我的关系是否有可能被关闭?
答案 0 :(得分:5)
David Brabant上面发布的链接包含了解决这个问题的解决方法:
$r = (Invoke-WebRequest -Uri $uri `
-Method 'POST' `
-ContentType 'application/json' `
-Body '{}' `
).Content | ConvertFrom-Json
答案 1 :(得分:0)
我发现Allanrbo的答案是在3或4次运行后仍然超时。
我改为做了以下事情:
powershell "(Invoke-RestMethod -Method 'Delete' -Uri '$uri').Content"
答案 2 :(得分:0)
很抱歉提出旧话题。我们现在使用Win 7和PowerShell 3.0版 我们遇到了与POST方法相同的问题。当我们第3次POST相同的JSON时,powershell窗口将挂起。关闭后重新打开它会起作用。
为了解决这个问题,简单地在POST结束时添加2行:
$ServicePoint = [System.Net.ServicePointManager]::FindServicePoint('<URL>')
$ServicePoint.CloseConnectionGroup("")