Квоты транспорта

Квоты транспорта — это механизм политики для принятия решения о том, когда подключение потребляет чрезмерные ресурсы. Квота является жестким ограничением, которое предотвращает использование дополнительных ресурсов после превышения значения квоты. Квоты транспорта предотвращают вредоносные или непреднамеренные атаки типа "отказ в обслуживании".

Транспорты Windows Communication Foundation (WCF) имеют значения квот по умолчанию, основанные на консервативном выделении ресурсов. Эти значения по умолчанию подходят для сред разработки и небольших сценариев установки. Администраторы служб должны проверять квоты на транспортировку и настраивать отдельные значения квот, если ресурсы исчерпаны или если соединения ограничиваются, несмотря на доступность дополнительных ресурсов.

Типы квот транспорта

Транспорт WCF имеет три типа квот:

  • Время ожидания смягчает атаки типа "отказ в обслуживании", которые основаны на блокировании ресурсов в течение длительного периода времени.

  • Ограничения выделения памяти предотвращают исчерпание системной памяти одним подключением и тем самым защищают возможность обслуживания других подключений.

  • Ограничения размера коллекции связаны с потреблением ресурсов, которые косвенно выделяют память или находятся в ограниченном объеме.

Описание квоты транспорта

В этом разделе описываются квоты транспорта, доступные для стандартных транспортов WCF: HTTP(S), TCP/IP и именованных каналов. Пользовательские транспорты могут предоставлять собственные настраиваемые квоты, не включенные в этот список. Ознакомьтесь с документацией по пользовательскому транспорту, чтобы узнать о его квотах.

Каждый параметр квоты имеет тип, минимальное значение и значение по умолчанию. Максимальное значение квоты ограничено его типом. Из-за ограничений компьютера невозможно задать квоту на максимальное значение.

Имя Тип Мин.

ценность
По умолчанию

ценность
Описание
ChannelInitializationTimeout Интервал времени 1 галочка 5 с Максимальное время ожидания соединения для отправки преамбулы перед чтением. Эти данные получаются перед проверкой подлинности. Обычно этот параметр намного меньше, чем ReceiveTimeout значение квоты.
CloseTimeout Интервал времени 0 1 мин. Максимальное время ожидания закрытия соединения, после которого транспорт вызовет исключение.
ConnectionBufferSize Целое число 1 8 КБ Размер в байтах буферов передачи и приёма в базовом транспортном слое. Увеличение размера буфера может повысить пропускную способность при отправке больших сообщений.
IdleTimeout Интервал времени 0 2 мин Максимальное время, в течение которого подключение в пуле может оставаться бездействующим перед закрытием.

Настройка применяется только к объединённым соединениям.
LeaseTimeout Интервал времени 0 5 мин. Максимальное время существования активного соединения из пула. После истечения указанного времени подключение закрывается после обслуживания текущего запроса.

Настройка применяется только к объединённым соединениям.
ListenBacklog Целое число 1 10 Максимальное количество подключений, которые прослушиватель может иметь необработанными перед отказами в дополнительных подключениях к этой конечной точке.
MaxBufferPoolSize Длинный 0 512 КБ Максимальный объём памяти в байтах, который транспорт выделяет для пула буферов повторно используемых сообщений. Если пул не может предоставить буфер сообщений, новый буфер выделяется для временного использования.

Установки, создающие множество фабрик каналов или прослушивателей, могут выделять большие объемы памяти для буферных пулов. Уменьшение этого размера буфера может значительно сократить использование памяти в этом сценарии.
MaxBufferSize Целое число 1 64 КБ Максимальный размер буфера в байтах, используемый для потоковых данных. Если эта квота транспорта не задана, или транспорт не использует потоковую передачу, значение квоты совпадает с меньшим MaxReceivedMessageSize значением квоты и MaxValue.
MaxOutboundConnectionsPerEndpoint Целое число 1 10 Максимальное количество исходящих подключений, которые могут быть связаны с определенной конечной точкой.

Настройка применяется только к объединённым соединениям.
MaxOutputDelay Интервал времени 0 200 мс Максимальное время ожидания после операции отправки для пакетирования дополнительных сообщений в одной операции. Сообщения отправляются ранее, если буфер базового транспорта становится полным. Отправка дополнительных сообщений не сбрасывает период задержки.
MaxPendingAccepts Целое число 1 1 Максимальное число приемов для каналов, которые прослушиватель может ожидать.

Существует интервал времени между завершением процесса принятия и началом нового принятия. Увеличение этого размера коллекции может предотвратить удаление клиентов, которые подключаются во время этого интервала.
MaxPendingConnections Целое число 1 10 Максимальное количество подключений, которые слушатель может ожидать для принятия приложением. При превышении этого значения квоты новые входящие подключения удаляются, а не ожидают принятия.

Такие функции подключения, как безопасность сообщений, могут привести к тому, что клиент открывает несколько подключений. Администраторы служб должны учитывать эти дополнительные подключения при настройке этого значения квоты.
MaxReceivedMessageSize Длинный 1 64 КБ Максимальный размер сообщения, полученного в байтах, включая заголовки, до того, как транспорт вызовет исключение.
OpenTimeout Интервал времени 0 1 мин. Максимальное время ожидания установления подключения до того, как транспорт вызовет исключение.
ReceiveTimeout Интервал времени 0 10 мин. Максимальное время ожидания завершения операции чтения перед тем, как транспорт вызывает исключение.
SendTimeout Временной диапазон 0 1 мин. Максимальное время ожидания завершения операции записи перед тем, как транспорт вызывает исключение.

Квоты транспорта MaxPendingConnections и MaxOutboundConnectionsPerEndpoint объединяются в одну квоту транспорта, именуемую MaxConnections при настройке через привязку или конфигурацию. Только элемент привязки позволяет задать эти значения квоты по отдельности. Квота MaxConnections транспорта имеет одинаковые минимальные значения и значения по умолчанию.

Настройка квот транспорта

Квоты на транспорт задаются с помощью элемента привязки транспорта, транспортной привязки, конфигурации приложения или политики хоста. В этом документе не рассматриваются параметры транспорта через политику узла. Ознакомьтесь с документацией по базовому транспорту, чтобы обнаружить параметры квот политики хоста. В разделе "Настройка HTTP и HTTPS " описываются параметры квоты для драйвера Http.sys. Выполните поиск в Базе знаний Майкрософт, чтобы получить больше информации о настройке ограничений Windows на подключения HTTP, TCP/IP и именованные каналы.

Другие типы квот применяются косвенно к транспорту. Кодировщик сообщений, который транспорт использует для преобразования сообщения в байты, может иметь собственные параметры квоты. Однако эти квоты не зависят от типа используемого транспорта.

Управление квотами транспорта из этого связывающего элемента

Настройка квот транспорта через элемент привязки обеспечивает максимальную гибкость при управлении поведением транспорта. Время ожидания по умолчанию для операций Close, Open, Receive и Send берется из привязки при построении канала.

Имя HTTP TCP/IP Именованный канал
ChannelInitializationTimeout X X
CloseTimeout
ConnectionBufferSize X X
IdleTimeout X X
LeaseTimeout X
ListenBacklog X
MaxBufferPoolSize X X X
MaxBufferSize X X X
MaxOutboundConnectionsPerEndpoint X X
MaxOutputDelay X X
MaxPendingAccepts X X
MaxPendingConnections X X
MaxReceivedMessageSize X X X
OpenTimeout
ReceiveTimeout
SendTimeout

Контроль квот транспорта от связывающего элемента

Настройка квот транспортировки через привязку предлагает упрощенный набор квот для выбора из них, при этом предоставляя доступ к наиболее распространённым значениям квот.

Имя HTTP TCP/IP Именованный канал
ChannelInitializationTimeout
CloseTimeout X X X
ConnectionBufferSize
IdleTimeout
LeaseTimeout
ListenBacklog X
MaxBufferPoolSize X X X
MaxBufferSize 1 X X
MaxOutboundConnectionsPerEndpoint 2 2
MaxOutputDelay
MaxPendingAccepts
MaxPendingConnections 2 2
MaxReceivedMessageSize X X X
OpenTimeout X X X
ReceiveTimeout X X X
SendTimeout X X X
  1. Квота на транспорт MaxBufferSize доступна только по привязке BasicHttp. WSHttp Привязки предназначены для сценариев, которые не поддерживают потоковые режимы транспорта.

  2. Квоты MaxPendingConnections транспорта и MaxOutboundConnectionsPerEndpoint объединяются в одну квоту транспорта MaxConnections.

Управление квотами транспорта из конфигурации

Конфигурация приложения может устанавливать такие же транспортные квоты, как и прямой доступ к свойствам привязки. В файлах конфигурации имя квоты транспорта всегда начинается с строчной буквы. Например, CloseTimeout свойство привязки соответствует closeTimeout параметру в конфигурации, а MaxConnections свойство привязки соответствует maxConnections параметру в конфигурации.

См. также