Является ли ServicePointManager.DefaultConnectionLimit IP-адресом?
Я создаю веб-сканер, и целевой сайт не допускает более двух одновременных подключений с одного и того же IP.
Мой план заключался в следующем: я бы купил EC2 с 4 дополнительными эластичными IP-адресами для более быстрого получения данных (было бы 10 одновременных соединений, 8 с дополнительных IP-адресов и 2 с "основного" IP).
Я бы использовал BindIPEndPointDelegate
(взял отсюда), чтобы установить исходный IP, а затем начать загрузку страниц.
Поэтому здесь возникает мой вопрос: DefaultConnectionLimit будет применяться к каждому исходному IP-адресу или будет ли приложение целиком ограничено двумя одновременными подключениями?
1 ответ
Вам нужно указать хост, иначе он применяется ко всем хостам:
Используя config:
<!-- By host -->
<configuration>
<system.net>
<connectionManagement>
<add address="myapi.com" maxconnection="12"/>
<add address="yourapi.com" maxconnection="8"/>
<add address="74.125.236.199" maxconnection="4"/>
</connectionManagement>
</system.net>
</configuration>
<!-- All hosts -->
<configuration>
<system.net>
<connectionManagement>
<add address="*" maxconnection="15"/>
</connectionManagement>
</system.net>
</configuration>
Используя код:
var apiServicePoint1 = ServicePointManager.FindServicePoint("myapi.com");
apiServicePoint1.ConnectionLimit = 12;
var apiServicePoint2 = ServicePointManager.FindServicePoint("yourapi.com");
apiServicePoint2.ConnectionLimit = 8;
Ссылка: https://vincentlauzon.com/2015/12/13/beyond-2-concurrent-connections-in-net/