Cotas de transporte

As cotas de transporte são um mecanismo de política para decidir quando uma conexão está consumindo recursos excessivos. Uma cota é um limite rígido que impede o uso de recursos adicionais depois que o valor da cota é excedido. As cotas de transporte impedem ataques de negação de serviço mal-intencionados ou não intencionais.

Os transportes do WCF (Windows Communication Foundation) têm valores de cota padrão baseados em uma alocação conservadora de recursos. Esses valores padrão são adequados para ambientes de desenvolvimento e cenários de instalação pequenos. Os administradores de serviço devem examinar as cotas de transporte e ajustar valores de cotas individuais caso uma instalação esteja ficando sem recursos ou se as conexões estiverem sendo limitadas, apesar da disponibilidade de recursos adicionais.

Tipos de cotas de transporte

Os transportes do WCF têm três tipos de cotas:

  • Os tempos limite reduzem os ataques de negação de serviço que dependem da associação de recursos por um longo período de tempo.

  • Os limites de alocação de memória impedem uma única conexão de esgotar a memória do sistema e negar serviço a outras conexões.

  • Os limites de tamanho da coleção associam o consumo de recursos que alocam indiretamente a memória ou estão em oferta limitada.

Descrições de cotas de transporte

Esta seção descreve as cotas de transporte disponíveis para os transportes padrão do WCF: HTTP(S), TCP/IP e pipes nomeados. Os transportes personalizados podem expor suas próprias cotas configuráveis não incluídas nesta lista. Consulte a documentação de um transporte personalizado para saber mais sobre suas cotas.

Cada definição de cota tem um tipo, um valor mínimo e um valor padrão. O valor máximo de uma cota é limitado por seu tipo. Devido às limitações do computador, nem sempre é possível definir uma cota como seu valor máximo.

Nome Tipo Mín.

value
Padrão

value
Descrição
ChannelInitializationTimeout TimeSpan 1 tique 5 segundos Tempo máximo a aguardar que uma conexão envie o preâmbulo durante a leitura inicial. Esses dados são recebidos antes da autenticação ocorrer. Essa definição geralmente é muito menor que o valor da cota ReceiveTimeout.
CloseTimeout TimeSpan 0 1 minuto Tempo máximo a aguardar que uma conexão feche antes que o transporte gere uma exceção.
ConnectionBufferSize Integer 1 8 KB Tamanho, em bytes, dos buffers de transmissão e recebimento do transporte subjacente. Aumentar o tamanho do buffer pode melhorar a taxa de transferência ao enviar mensagens grandes.
IdleTimeout TimeSpan 0 2 min Tempo máximo em que uma conexão em pool pode permanecer ociosa antes de ser fechada.

Essa definição só se aplica a conexões em pool.
LeaseTimeout TimeSpan 0 5 min Tempo de vida máximo de uma conexão ativa em pool. Depois que o tempo especificado tiver decorrido, a conexão será fechada quando a solicitação atual for atendida.

Essa definição só se aplica a conexões em pool.
ListenBacklog Integer 1 10 Número máximo de conexões que o ouvinte pode ter não servidas antes que conexões adicionais com esse ponto de extremidade sejam negadas.
MaxBufferPoolSize long 0 512 KB Memória máxima, em bytes, que o transporte dedica ao agrupamento de buffers de mensagens reutilizáveis. Quando o pool não pode fornecer um buffer de mensagem, um novo buffer é alocado para uso temporário.

Instalações que criam muitas fábricas de canais ou ouvintes podem alocar grandes quantidades de memória para pools de buffers. Reduzir esse tamanho de buffer pode reduzir consideravelmente o uso de memória nesse cenário.
MaxBufferSize Integer 1 64 KB Tamanho máximo, em bytes, de um buffer usado para transmitir dados. Se essa cota de transporte não estiver definida ou o transporte não estiver usando streaming, o valor da cota será o mesmo que o menor entre o valor da cota MaxReceivedMessageSize e MaxValue.
MaxOutboundConnectionsPerEndpoint Integer 1 10 Número máximo de conexões de saída que podem ser associadas a um ponto de extremidade específico.

Essa definição só se aplica a conexões em pool.
MaxOutputDelay TimeSpan 0 200 ms Tempo máximo a aguardar após uma operação de envio para envio em lote de mensagens adicionais em uma única operação. As mensagens serão enviadas anteriormente se o buffer do transporte subjacente ficar cheio. O envio de mensagens adicionais não redefine o período de atraso.
MaxPendingAccepts Integer 1 1 Número máximo de aceitações para canais que o ouvinte pode ter em espera.

Há um intervalo de tempo entre a conclusão de aceitação e uma nova aceitação tendo início. Aumentar esse tamanho de coleção pode impedir que os clientes que se conectam durante esse intervalo sejam removidos.
MaxPendingConnections Integer 1 10 Número máximo de conexões que o ouvinte pode ter em espera para serem aceitas pelo aplicativo. Quando esse valor de cota é excedido, novas conexões de entrada são descartadas em vez de esperar para serem aceitas.

Os recursos de conexão, como segurança de mensagem, podem fazer com que um cliente abra mais de uma conexão. Os administradores de serviço devem considerar essas conexões adicionais ao definir esse valor de cota.
MaxReceivedMessageSize long 1 64 KB Tamanho máximo, em bytes, de uma mensagem recebida, incluindo cabeçalhos, antes que o transporte gere uma exceção.
OpenTimeout TimeSpan 0 1 minuto Tempo máximo a aguardar que uma conexão seja estabelecida antes que o transporte gere uma exceção.
ReceiveTimeout TimeSpan 0 10 min Tempo máximo a aguardar que uma operação de leitura seja concluída antes que o transporte gere uma exceção.
SendTimeout Timespan 0 1 minuto Tempo máximo a aguardar que uma operação de gravação seja concluída antes que o transporte gere uma exceção.

As cotas de transporte MaxPendingConnections e MaxOutboundConnectionsPerEndpoint são combinadas em uma única cota de transporte chamada MaxConnections quando definida por meio de associação ou configuração. Somente o elemento de associação permite definir esses valores de cota individualmente. A cota de transporte MaxConnections tem os mesmos valores mínimos e padrão.

Definir cotas de transporte

As cotas de transporte são definidas por meio do elemento de associação de transporte, da associação de transporte, da configuração do aplicativo ou da política de host. Este documento não abrange a definição de transportes por meio da política de host. Consulte a documentação do transporte subjacente para descobrir as definições para cotas de política de host. O tópico Configurar HTTP e HTTPS descreve as definições de cota para o driver Http.sys. Pesquise na base de dados de conhecimento da Microsoft mais informações sobre como configurar limites do Windows em HTTP, TCP/IP e conexões de pipe nomeado.

Outros tipos de cotas se aplicam indiretamente aos transportes. O codificador de mensagens que o transporte usa para transformar uma mensagem em bytes pode ter suas próprias definições de cota. No entanto, essas cotas são independentes do tipo de transporte que está sendo usado.

Controlar cotas de transporte no elemento de associação

Definir cotas de transporte por meio do elemento de associação oferece a maior possível flexibilidade no controle do comportamento do transporte. Os tempos limite padrão para as operações Fechar, Abrir, Receber e Enviar são obtidos da associação quando um canal é criado.

Nome HTTP TCP/IP Pipe nomeado
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

Controlar cotas de transporte na associação

Definir cotas de transporte por meio da associação oferece um conjunto simplificado de cotas a escolher enquanto ainda dá acesso aos valores de cota mais comuns.

Nome HTTP TCP/IP Pipe nomeado
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. A cota de transporte MaxBufferSize só está disponível na associação BasicHttp. As associações WSHttp são para cenários que não dão suporte a modos de transporte transmitidos.

  2. As cotas de transporte MaxPendingConnections e MaxOutboundConnectionsPerEndpoint são combinadas em uma cota de transporte única chamada MaxConnections.

Controlar cotas de transporte na configuração

A configuração do aplicativo pode definir as mesmas cotas de transporte que acessar diretamente as propriedades em uma associação. Nos arquivos de configuração, o nome de uma cota de transporte sempre começa com uma letra minúscula. Por exemplo, a propriedade CloseTimeout em uma associação corresponde à definição closeTimeout na configuração e a propriedade MaxConnections em uma associação corresponde à definição maxConnections na configuração.

Confira também