PSH Runspaces + New-WebServiceProxy = 2 ограничения на соединение?

Мне нужен высокопроизводительный скрипт, вызывающий внутренний веб-сервис. Поэтому я написал сценарий powershell для создания потоков пространства выполнения, каждый из которых выполняет запрос к общему прокси-объекту веб-службы (New-WebServiceProxy).

Я выяснил, что независимо от количества создаваемых мной потоков и числа рабочих процессов пула приложений веб-службы, я одновременно выполняю только 2 HTTP-соединения с компьютера, на котором выполняется сценарий, и поэтому в веб-службе происходят только два процесса. Это не дает мне достаточно быстрых результатов.

Запустив свой сценарий на нескольких клиентских компьютерах, я могу повысить свои рабочие процессы до 8, прежде чем загружать веб-сервер. Мне нужно попасть туда в коде с помощью одного сценария powershell.

Я попытался установить этот раздел реестра на 8:

HKEY_CURRENT_USER \ Программное обеспечение \Microsoft\Windows\CurrentVersion\ Интернет-настройки \MaxConnectionsPerProxy

Казалось, что это может повысить производительность моего скрипта, но я все еще вижу только 2 HTTP-соединения с веб-сервисом.

Похоже, что реальным решением является управление этим свойством.Net:

https://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.defaultconnectionlimit(v=vs.110).aspx

Может кто-нибудь объяснить мне, как в PowerShell я могу справиться с этим? Я не могу выяснить какую-либо связь между объектом, возвращаемым New-WebServiceProxy и классом ServicePoint? Так что же установить в Powershell, чтобы изменить ограничение 2-х соединений?

1 ответ

Решение

Я думаю, вам просто нужно установить ограничение соединения по умолчанию на большее значение в вашем скрипте, например:

[System.Net.ServicePointManager]::DefaultConnectionLimit = 8

Связь между ServicePointManager и сгенерированный класс является то, что сгенерированный класс наследует от SoapHttpClientProtocol который внутренне использует System.Net.HttpWebRequest совершать сетевые звонки. Внутренне HttpWebRequest использования ServicePoint а также ServicePointManager для контроля количества одновременных звонков в полете, которые вы можете совершать.

Другие вопросы по тегам