Quotas 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 quando o valor da cota é excedido. As cotas de transporte evitam ataques mal-intencionados ou não intencionais de negação de serviço.
Os transportes do Windows Communication Foundation (WCF) 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 revisar as cotas de transporte e ajustar os valores de cota individuais se uma instalação estiver ficando sem recursos ou se as conexões estiverem sendo limitadas apesar da disponibilidade de recursos adicionais.
Tipos de quotas de transporte
Os transportes WCF têm três tipos de quotas:
Os tempos limite atenuam os ataques de negação de serviço que dependem da vinculação de recursos por um longo período de tempo.
Os limites de alocação de memória impedem que uma única conexão esgote a memória do sistema e negue o serviço a outras conexões.
Os limites de tamanho de coleta limitam o consumo de recursos que alocam memória indiretamente ou estão em fornecimento limitado.
Descrições das quotas de transporte
Esta seção descreve as cotas de transporte disponíveis para os transportes WCF padrão: 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 aduaneiro para saber mais sobre as suas quotas.
Cada configuração de cota tem um tipo, valor mínimo e valor padrão. O valor máximo de uma quota é limitado pelo seu tipo. Devido a limitações da máquina, nem sempre é possível definir uma quota para o seu valor máximo.
Nome | Tipo | Mín. valor |
Default valor |
Description |
---|---|---|---|---|
ChannelInitializationTimeout |
TimeSpan | 1 carrapato | 5 segundos | Tempo máximo de espera por uma ligação para enviar o preâmbulo durante a leitura inicial. Esses dados são recebidos antes que a autenticação ocorra. Essa configuração geralmente é muito menor do que o valor da cota ReceiveTimeout . |
CloseTimeout |
TimeSpan | 0 | 1 min | Tempo máximo de espera para que uma conexão feche antes que o transporte gere uma exceção. |
ConnectionBufferSize |
Número inteiro | 1 | 8 KB | Tamanho, em bytes, dos buffers de transmissão e receção do transporte subjacente. Aumentar o tamanho do buffer pode melhorar a taxa de transferência ao enviar mensagens grandes. |
IdleTimeout |
TimeSpan | 0 | 2 minutos | Tempo máximo que uma conexão em pool pode permanecer ociosa antes de ser fechada. Essa configuração só se aplica a conexões agrupadas. |
LeaseTimeout |
TimeSpan | 0 | 5 minutos | Vida útil máxima de uma conexão em pool ativa. Depois que o tempo especificado passar, a conexão será fechada assim que a solicitação atual for atendida. Essa configuração só se aplica a conexões agrupadas. |
ListenBacklog |
Número inteiro | 1 | 10 | Número máximo de conexões que o ouvinte pode ter sem manutenção antes que conexões adicionais com esse ponto de extremidade sejam negadas. |
MaxBufferPoolSize |
Longo | 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 mensagens, um novo buffer é alocado para uso temporário. As 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 muito o uso de memória nesse cenário. |
MaxBufferSize |
Número inteiro | 1 | 64 KB | Tamanho máximo, em bytes, de um buffer usado para streaming de dados. Se essa cota de transporte não estiver definida ou se o transporte não estiver usando streaming, o valor da cota será o mesmo que o menor do valor da cota MaxReceivedMessageSize e MaxValue. |
MaxOutboundConnectionsPerEndpoint |
Número inteiro | 1 | 10 | Número máximo de conexões de saída que podem ser associadas a um ponto de extremidade específico. Essa configuração só se aplica a conexões agrupadas. |
MaxOutputDelay |
TimeSpan | 0 | 200 ms | Tempo máximo de espera após uma operação de envio para envio de mensagens adicionais em lote em uma única operação. As mensagens são enviadas mais cedo se o buffer do transporte subjacente ficar cheio. O envio de mensagens adicionais não repõe o período de atraso. |
MaxPendingAccepts |
Número inteiro | 1 | 1 | Número máximo de aceitações para canais que o ouvinte pode ter esperando. Há um intervalo de tempo entre a conclusão da aceitação e o início de uma nova aceitação. Aumentar esse tamanho de coleção pode impedir que os clientes que se conectam durante esse intervalo sejam descartados. |
MaxPendingConnections |
Número inteiro | 1 | 10 | Número máximo de conexões que o ouvinte pode ter aguardando para ser aceito pelo aplicativo. Quando esse valor de cota é excedido, novas conexões de entrada são descartadas em vez de esperar para serem aceitas. Recursos de conexão, como segurança de mensagens, podem fazer com que um cliente abra mais de uma conexão. Os administradores de serviço devem levar em conta essas conexões adicionais ao definir esse valor de cota. |
MaxReceivedMessageSize |
Longo | 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 min | Tempo máximo de espera para que uma conexão seja estabelecida antes que o transporte levante uma exceção. |
ReceiveTimeout |
TimeSpan | 0 | 10 minutos | Tempo máximo de espera pela conclusão de uma operação de leitura antes que o transporte gere uma exceção. |
SendTimeout |
Timespan | 0 | 1 min | Tempo máximo de espera pela conclusão de uma operação de gravação antes que o transporte gere uma exceção. |
As quotas MaxPendingConnections
de transporte e MaxOutboundConnectionsPerEndpoint
são combinadas numa única quota de transporte chamada MaxConnections
quando definida através da ligação ou configuração. Somente o elemento binding permite definir esses valores de cota individualmente. A MaxConnections
cota de transporte tem os mesmos valores mínimos e padrão.
Definição de quotas de transporte
As cotas de transporte são definidas por meio do elemento de vinculação de transporte, da vinculação de transporte, da configuração do aplicativo ou da política de host. Este documento não abrange a configuração de transportes através da política de host. Consulte a documentação do transporte subjacente para descobrir as configurações das cotas de política de host. O tópico Configurando HTTP e HTTPS descreve as configurações de cota para o driver Http.sys. Pesquise na Base de Dados de Conhecimento Microsoft para obter mais informações sobre como configurar limites do Windows em conexões HTTP, TCP/IP e pipe nomeado.
Outros tipos de contingentes aplicam-se indiretamente aos transportes. O codificador de mensagens que o transporte usa para transformar uma mensagem em bytes pode ter suas próprias configurações de cota. No entanto, estas quotas são independentes do tipo de transporte utilizado.
Controlando cotas de transporte a partir do elemento vinculativo
A definição de quotas de transporte através do elemento binding oferece a maior flexibilidade no controlo do comportamento do transporte. Os tempos limite padrão para as operações Fechar, Abrir, Receber e Enviar são retirados 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 |
Controlando as cotas de transporte a partir da vinculação
A fixação de quotas de transporte através da vinculação oferece um conjunto simplificado de quotas à escolha, ao mesmo tempo que dá acesso aos valores de quota 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 |
A
MaxBufferSize
quota de transporte só está disponível naBasicHttp
vinculação. AsWSHttp
ligações são para cenários que não suportam modos de transporte transmitidos.As quotas
MaxPendingConnections
de transporte eMaxOutboundConnectionsPerEndpoint
são combinadas numa única quota de transporte denominadaMaxConnections
.
Controlando cotas de transporte a partir da 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 CloseTimeout
propriedade em uma associação corresponde à closeTimeout
configuração na configuração e a MaxConnections
propriedade em uma associação corresponde à maxConnections
configuração na configuração.