Cuotas de transporte
Las cuotas de transporte son un mecanismo de directivas para decidir cuándo una conexión está utilizando recursos excesivos. Una cuota es un límite que evita una vez el uso de recursos adicionales una vez que se supera el valor de cuota. Las cuotas de transporte evitan los ataques de denegación de servicio (DoS) malintencionados o involuntarios.
Los transportes de Windows Communication Foundation (WCF) tienen valores de cuota predeterminados basados en una asignación conservadora de los recursos. Estos valores predeterminados son convenientes para entornos de desarrollo y pequeños escenarios de instalación. Los administradores del servicio deberían revisar las cuotas de transporte y ajustar los valores de la cuota individual si una instalación se está quedando sin recursos o si se limitan las conexiones a pesar de la disponibilidad de recursos adicionales.
Tipos de cuotas de transporte
Los transportes de WCF tienen tres tipos de cuotas:
Los tiempos de espera mitigan los ataques por denegación de servicio que se basan en atar recursos durante un amplio período de tiempo.
Los límites de asignación de memoria evitan que una conexión única agote la memoria del sistema y niegue el servicio a otras conexiones.
Los límites de tamaño de colección delimitan el consumo de recursos que asignan memoria de manera indirecta o están en un suministro limitado.
Descripciones de la cuota de transporte
En esta sección, se describen las cuotas de transporte disponibles para los transportes estándar de WCF: HTTP(S) TCP/IP y canalizaciones con nombre. Los transportes personalizados pueden exponer sus propias cuotas configurables no incluidas en esta lista. Consulte la documentación de un transporte personalizado para averiguar sus cuotas.
Cada valor de cuota tiene un tipo, valor mínimo y valor predeterminado. Su tipo limita el valor máximo de una cuota. Debido a las limitaciones de los equipos, no siempre es posible establecer una cuota en su valor máximo.
Nombre | Tipo | Mín. value |
Default value |
Descripción |
---|---|---|---|---|
ChannelInitializationTimeout |
TimeSpan | 1 tic | 5 segundos | Tiempo máximo a esperar para que una conexión envíe el preámbulo durante la lectura inicial. Estos datos se reciben antes de que se produzca la autenticación. Este valor es generalmente mucho más pequeño que el valor de cuota de ReceiveTimeout . |
CloseTimeout |
TimeSpan | 0 | 1 min | El tiempo máximo que se ha de esperar para que una conexión se cierre antes de que el transporte produzca una excepción. |
ConnectionBufferSize |
Entero | 1 | 8 KB | Tamaño, en bytes, de los búfers de transmisión y recepción del transporte subyacente. Si se aumenta el tamaño de búfer, se puede mejorar el rendimiento al enviar mensajes grandes. |
IdleTimeout |
TimeSpan | 0 | 2 min | Tiempo máximo que una conexión agrupada puede permanecer inactiva antes de cerrarse. Este ajuste solo se aplica a las conexiones agrupadas. |
LeaseTimeout |
TimeSpan | 0 | 5 min | Duración máxima de una conexión agrupada activa. Después de que transcurra la hora especificada, la conexión se cierra después de que se repare la solicitud actual. Este ajuste solo se aplica a las conexiones agrupadas. |
ListenBacklog |
Entero | 1 | 10 | Número máximo de conexiones que el agente de escucha puede tener sin atender antes de que se denieguen las conexiones adicionales a ese punto de conexión. |
MaxBufferPoolSize |
long | 0 | 512 KB | Memoria máxima, en bytes, que el transporte dedica a agrupar los búferes de mensajes reutilizables. Cuando el grupo no puede proporcionar un búfer de mensaje, se asigna un nuevo búfer para el uso temporal. Las instalaciones que crean muchos generadores de canales o agentes de escucha pueden asignar grandes cantidades de memoria para grupos de búferes. Reducir este tamaño de búfer puede reducir en gran mediad el uso de memoria en este escenario. |
MaxBufferSize |
Entero | 1 | 64 KB | Tamaño máximo, en bytes, de un búfer utilizado para la secuenciación de datos. Si no se establece esta cuota de transporte, o el transporte no está utilizando la transmisión por secuencias, el valor de cuota es igual que el valor de cuota MaxReceivedMessageSize o MaxValue, lo que sea más pequeño. |
MaxOutboundConnectionsPerEndpoint |
Entero | 1 | 10 | Número máximo de conexiones salientes que pueden asociarse a un punto de conexión determinado. Este ajuste solo se aplica a las conexiones agrupadas. |
MaxOutputDelay |
TimeSpan | 0 | 200 ms | Tiempo máximo que se debe esperar después de una operación de envío para procesar por lotes los mensajes adicionales en una única operación. Se envían los mensajes antes si el búfer del transporte subyacente se llena. Mediante el envío de mensajes adicionales, no se restablece el período del retraso. |
MaxPendingAccepts |
Entero | 1 | 1 | Número máximo de aceptaciones para los canales que el agente de escucha puede tener en espera. Hay un intervalo de tiempo entre la completación de la aceptación y el inicio de una nueva aceptación. El aumento de este tamaño de colección puede evitar que se quiten clientes que conecten durante este intervalo. |
MaxPendingConnections |
Entero | 1 | 10 | Número máximo de conexiones que el agente de escucha puede tener en espera para que la aplicación las acepte. Cuando se supera este valor de cuota, se pierden las nuevas conexiones entrantes en lugar de esperar a ser aceptadas. Características de conexión como la seguridad de mensaje pueden hacer que un cliente abra más de una conexión. Los administradores de servicio deberían tener en cuenta estas conexiones adicionales al establecer este valor de cuota. |
MaxReceivedMessageSize |
long | 1 | 64 KB | Tamaño máximo, en bytes, de un mensaje recibido, incluyendo los encabezados, antes de que el transporte produzca una excepción. |
OpenTimeout |
TimeSpan | 0 | 1 min | El tiempo máximo que se ha de esperar para que una conexión se establezca antes de que el transporte produzca una excepción. |
ReceiveTimeout |
TimeSpan | 0 | 10 min | El tiempo máximo a esperar para que una operación de lectura se complete antes de que el transporte produzca una excepción. |
SendTimeout |
TimeSpan | 0 | 1 min | El tiempo máximo a esperar para que una operación de escritura se complete antes de que el transporte produzca una excepción. |
Las cuotas de transporte MaxPendingConnections
y MaxOutboundConnectionsPerEndpoint
se combinan en una cuota de transporte única llamada MaxConnections
cuando se establece a través del enlace o configuración. Solo el elemento de enlace permite ajustar estos valores individualmente. La cuota de transporte MaxConnections
tiene el mismo mínimo y valores predeterminados.
Establecimiento de cuotas de transporte
Las cuotas de transporte se establecen a través del elemento de enlace de transporte, el enlace de transporte, la configuración de la aplicación o la directiva de host. En este documento no se explica cómo establecer transportes mediante la directiva de host. Consulte la documentación del transporte subyacente para descubrir los ajustes de las cuotas de directivas de host. El tema Configuración de HTTP y HTTPS describe los valores de cuota para el controlador de Http.sys. Busque más información en Microsoft Knowledge Base sobre cómo configurar los límites de Windows en HTTP, TCP/IP y conexiones de canalización con nombre.
Otros tipos de cuotas se aplican indirectamente a los transportes. El codificador del mensaje que utiliza el transporte para transformar un mensaje en bytes puede tener sus propios valores de cuota. No obstante, estas cuotas son independientes del tipo de transporte que se use.
Control de las cuotas de transporte a partir del elemento de enlace
Establecer las cuotas de transporte a través del elemento de enlace proporciona la máxima flexibilidad para controlar el comportamiento del transporte. Los tiempos de espera predeterminados para operaciones de cierre, apertura, recepción y envío se toman del enlace cuando se crea un canal.
Nombre | HTTP | TCP/IP | Canalización con nombre |
---|---|---|---|
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 |
Control de las cuotas de transporte a partir del enlace
Establecer las cuotas de transporte a través del enlace ofrece un conjunto simplificado de cuotas de entre las que elegir al mismo tiempo que se proporciona acceso a los valores de cuota más comunes.
Nombre | HTTP | TCP/IP | Canalización con nombre |
---|---|---|---|
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 |
La cuota de transporte
MaxBufferSize
solo está disponible en el enlaceBasicHttp
. Los enlacesWSHttp
son para escenarios que no admitan modos de transporte de transmisión por secuencias.Las cuotas de transporte
MaxPendingConnections
yMaxOutboundConnectionsPerEndpoint
se combinan en una cuota de transporte única llamadaMaxConnections
.
Control de las cuotas de transporte a partir de la configuración
La configuración de la aplicación puede establecer las mismas cuotas de transporte como obtener acceso directamente a las propiedades en un enlace. En archivos de configuración, el nombre de una cuota de transporte se inicia siempre con una minúscula. Por ejemplo, la propiedad CloseTimeout
en un enlace corresponde al valor closeTimeout
en la configuración y la propiedad MaxConnections
en un enlace corresponde al valor maxConnections
en la configuración.