PSH Runspaces + New-WebServiceProxy = 2 ограничения на соединение?
Мне нужен высокопроизводительный скрипт, вызывающий внутренний веб-сервис. Поэтому я написал сценарий powershell для создания потоков пространства выполнения, каждый из которых выполняет запрос к общему прокси-объекту веб-службы (New-WebServiceProxy).
Я выяснил, что независимо от количества создаваемых мной потоков и числа рабочих процессов пула приложений веб-службы, я одновременно выполняю только 2 HTTP-соединения с компьютера, на котором выполняется сценарий, и поэтому в веб-службе происходят только два процесса. Это не дает мне достаточно быстрых результатов.
Запустив свой сценарий на нескольких клиентских компьютерах, я могу повысить свои рабочие процессы до 8, прежде чем загружать веб-сервер. Мне нужно попасть туда в коде с помощью одного сценария powershell.
Я попытался установить этот раздел реестра на 8:
HKEY_CURRENT_USER \ Программное обеспечение \Microsoft\Windows\CurrentVersion\ Интернет-настройки \MaxConnectionsPerProxy
Казалось, что это может повысить производительность моего скрипта, но я все еще вижу только 2 HTTP-соединения с веб-сервисом.
Похоже, что реальным решением является управление этим свойством.Net:
Может кто-нибудь объяснить мне, как в PowerShell я могу справиться с этим? Я не могу выяснить какую-либо связь между объектом, возвращаемым New-WebServiceProxy и классом ServicePoint? Так что же установить в Powershell, чтобы изменить ограничение 2-х соединений?
1 ответ
Я думаю, вам просто нужно установить ограничение соединения по умолчанию на большее значение в вашем скрипте, например:
[System.Net.ServicePointManager]::DefaultConnectionLimit = 8
Связь между ServicePointManager
и сгенерированный класс является то, что сгенерированный класс наследует от SoapHttpClientProtocol
который внутренне использует System.Net.HttpWebRequest
совершать сетевые звонки. Внутренне HttpWebRequest
использования ServicePoint
а также ServicePointManager
для контроля количества одновременных звонков в полете, которые вы можете совершать.