2016-10-27 8 views
0

Я создал сценарий Powershell, который проверяет кучу URL-адресов. Ниже приведен фрагмент кода, который использует WebClient для чтения из списка URL по одному.Powershell: Почему System.Net.WebClient не работает на третьем openRead для того же хоста

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) 

Странно то, что это время на каждой третьей попытке для каждого отдельного хоста, который я предоставляю. Сначала я потратил несколько часов на устранение неполадок конфигурации веб-сервера, чтобы понять, что именно сам Webclient как-то уходит, когда пытается подключиться к одному и тому же хосту в третий раз.

Я попытался добавить $wc.Dispose(), а также попытался создать объект каждый раз в цикле $wc = New-Object System.Net.WebClient, но без помощи.

версия Powershell -Command "Write-Host $psversiontable.psversion" 4.0 на Windows, 2012.

ответ

2

Вам нужно закрыть поток, что-то вроде:

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

Располагая WebClient также хорошая идея

+0

Magic, добавил '$ поток. close() 'и' $ wc.dispose() 'в' finally' -блоке, что решило проблему. – rhellem

 Смежные вопросы

  • Нет связанных вопросов^_^