ServicePointManager.DefaultConnectionLimit, возвращающий Int32.MaxValue

В целях диагностики я регистрирую ServicePointManager.DefaultConnectionLimit. Однако, как ни странно, кажется, что он возвращает Int32.MaxValue (то есть 2147483647).

Это противоречит документации MSDN по этому вопросу:

Максимальное количество одновременных подключений, разрешенное объектом ServicePoint. Значением по умолчанию является 2.

Для контекста, я получаю это значение в приложении ASP.Net 4, работающем на 4.6.1

1 ответ

Решение

Исходя из ссылки @Wimmel, в ASP.Net кажется, что она установлена ​​на Int32.MaxValue как часть времени выполнения HTTP.

Мы можем увидеть это, заглянув внутрь System.Web собрание на HttpRuntime класс

Есть метод, который называется SetAutoConfigLimits который устанавливает его Int32.MaxValue, Вот соответствующая выдержка:

private void SetAutoConfigLimits(ProcessModelSection pmConfig)
{
    int workerThreads;
    int completionPortThreads;
    ThreadPool.GetMaxThreads(out workerThreads, out completionPortThreads);
    if (pmConfig.DefaultMaxWorkerThreadsForAutoConfig != workerThreads || pmConfig.DefaultMaxIoThreadsForAutoConfig != completionPortThreads)
        UnsafeNativeMethods.SetClrThreadPoolLimits(pmConfig.DefaultMaxWorkerThreadsForAutoConfig, pmConfig.DefaultMaxIoThreadsForAutoConfig, true);
    ServicePointManager.DefaultConnectionLimit = int.MaxValue;
}
Другие вопросы по тегам