Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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 coleção limitam o consumo de recursos que alocam memória indiretamente ou estão em fornecimento limitado.
Descrições das quotas de transporte
Esta secção descreve os limites de transporte disponíveis para os transportes WCF padrão: HTTP(S), TCP/IP e canais nomeados. Os transportes personalizados podem expor as suas próprias cotas configuráveis que não estã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 | A quantidade min. valor |
Predefinido valor |
Descrição |
---|---|---|---|---|
ChannelInitializationTimeout |
Período de tempo | 1 carrapato | 5 seg | Tempo máximo de espera para estabelecer uma ligação e 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 |
Período de tempo | 0 | 1 minuto | Tempo máximo para esperar que uma conexão se 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 |
Período de tempo | 0 | 2 minutos | Tempo máximo que uma conexão em pool pode ficar ociosa antes de ser fechada. Essa configuração só se aplica a conexões agrupadas. |
LeaseTimeout |
Período de tempo | 0 | 5 minutos | Vida útil máxima de uma ligação partilhada 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 não atendidas antes que conexões adicionais ao 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 grupos 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 |
Período de tempo | 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 aceite para canais que o ouvinte pode ter em espera. 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 |
Período de tempo | 0 | 1 minuto | Tempo máximo de espera para que uma conexão seja estabelecida antes que o transporte levante uma exceção. |
ReceiveTimeout |
Período de tempo | 0 | 10 minutos | Tempo máximo para aguardar a conclusão de uma operação de leitura antes de o transporte gerar uma exceção. |
SendTimeout |
Intervalo de tempo | 0 | 1 minuto | Tempo máximo de espera para a conclusão de uma operação de escrita 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 definidas através do processo de configuração ou ligaçã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 conexão de transporte, da conexã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 Conhecimento da Microsoft para obter mais informações sobre como configurar limitações do Windows em conexões HTTP, TCP/IP e pipes nomeados.
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
associações são para cenários que não suportam modos de transporte em fluxo contínuo.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 da aplicação pode definir as mesmas cotas de transporte que aceder diretamente às propriedades de uma ligaçã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
numa associação corresponde à definição closeTimeout
na configuração e a propriedade MaxConnections
numa associação corresponde à definição maxConnections
na configuração.