Powershell:为什么 System.Net.WebClient 在同一主机的第三次 openRead 上失败

Powershell: Why does System.Net.WebClient fail on the third openRead for the same host

我创建了一个 Powershell 脚本来检查一堆 URL。下面是使用 WebClient 逐一读取 url 列表的代码片段。

try {
    $log.debugFormat("Now checking endpoint={0}", $checkUrl)
    $wc.OpenRead($checkUrl)
    $log.infoFormat("guid={0} loop={1} endpoint={2} status=success", ($guid, $i, $checkUrl))
} catch [System.Net.WebException] {
    $log.errorFormat("guid={0} Could not connect to {1}", ($guid, $checkUrl))
    $ErrorMessage = $_.Exception.Message
    $log.errorFormat("{0}", $ErrorMessage)

奇怪的是,对于我提供的每个主机,每三次尝试都会超时。首先,我花了几个小时对网络服务器配置进行故障排除,现在才意识到是网络客户端本身在第三次尝试连接到同一主机时不知何故超时。

我尝试添加 $wc.Dispose() 并且每次都尝试在循环 $wc = New-Object System.Net.WebClient 中创建对象,但没有帮助。

版本是 Powershell -Command "Write-Host $psversiontable.psversion" 4.0,于 Windows 2012 年。

您需要关闭流,例如:

$stream = $wc.OpenRead($checkUrl)
$stream.Close()

处置WebClient也是个好主意