Quote dei trasporti
Le quote dei trasporti sono un meccanismo di criterio per stabilire quando una connessione sta utilizzando risorse eccessive. Una quota è un limite che impedisce l'utilizzo di risorse aggiuntive quando il valore della quota viene superato. Le quote dei trasporti impediscono attacchi di tipo Denial of Service (DoS) volutamente dannosi o non intenzionali.
I trasporti di Windows Communication Foundation (WCF) hanno valori di quota predefiniti basati su un'allocazione conservativa delle risorse. Questi valori predefiniti sono adatti per ambienti di sviluppo e scenari con installazioni di piccole dimensioni. Gli amministratori del servizio devono esaminare le quote dei trasporti e ottimizzare i singoli valori nel caso in cui un'installazione stia esaurendo le risorse o le connessioni vengano limitate nonostante la disponibilità di risorse aggiuntive.
I trasporti WCF sono caratterizzati da tre tipi di quote:
I timeout riducono il rischio di attacchi di tipo Denial of Service basati sul blocco di risorse per intervalli di tempo prolungati.
I limiti di allocazione della memoria impediscono che un'unica connessione esaurisca la memoria del sistema e neghi il servizio ad altre connessioni.
I limiti di dimensioni della raccolta limitano il consumo di risorse che allocano memoria indirettamente o sono in approvvigionamento limitato.
Contenuto della sezione vengono descritte le quote dei trasporti disponibili per i trasporti WCF standard: HTTP(S), TCP/IP e named pipe. I trasporti personalizzati possono esporre le proprie quote configurabili non incluse in questo elenco. Consultare la documentazione per il trasporto personalizzato e quote relative.
Ogni impostazione della quota è caratterizzata da un tipo, un valore minimo e un valore predefinito. Il valore massimo di una quota è limitato dal tipo. A causa di limitazioni dei computer, non è sempre possibile impostare una quota sul suo valore massimo.
Nome | Type | Min. value |
Default value |
Descrizione |
---|---|---|---|---|
ChannelInitializationTimeout |
TimeSpan | 1 tick | 5 Secondi | Tempo massimo di attesa perché una connessione invii il preambolo durante la lettura iniziale. Questi dati vengono ricevuti prima che si verifichi l'autenticazione. Questa impostazione è generalmente molto più piccola del valore della quota ReceiveTimeout . |
CloseTimeout |
TimeSpan | 0 | 1 min | Tempo massimo di attesa per la chiusura di una connessione prima che il trasporto generi un'eccezione. |
ConnectionBufferSize |
Intero | 1 | 8 KB | Dimensione, in byte, dei buffer di trasmissione e ricezione del trasporto sottostante. L'aumento della dimensione del buffer può migliorare la velocità effettiva in caso di invio di messaggi grandi. |
IdleTimeout |
TimeSpan | 0 | 2 min | Tempo massimo di inattività per una connessione in pool prima di essere chiusa. Questa impostazione viene applicata solo a connessioni in pool. |
LeaseTimeout |
TimeSpan | 0 | 5 min | Durata massima di una connessione in pool attiva. Trascorso il periodo di tempo specificato, la connessione si chiude al termine dell'esecuzione della richiesta corrente. Questa impostazione viene applicata solo a connessioni in pool. |
ListenBacklog |
Intero | 1 | 10 | Numero massimo di connessioni che un listener può avere in attesa di esecuzione oltre il quale viene negata l'autorizzazione ad ulteriori connessioni a quell'endpoint. |
MaxBufferPoolSize |
Lungo | 0 | 512 KB | Memoria massima, in byte, che il trasporto dedica al pooling di buffer dei messaggi riutilizzabili. Quando il pool non può fornire un buffer dei messaggi, ne viene allocato uno nuovo per utilizzo temporaneo. Le installazioni che creano numerosi listener del canale o channel factory possono allocare grandi quantità di memoria per i pool di buffer. La riduzione delle dimensioni del buffer può ridurre considerevolmente l'utilizzo della memoria in questo scenario. |
MaxBufferSize |
Intero | 1 | 64 kB | Dimensione massima, in byte, di un buffer utilizzato per il flusso di dati. Se questa quota del trasporto non è impostata o se il trasporto non sta utilizzando l'invio nel flusso, il valore della quota corrisponde al minore tra i valori MaxReceivedMessageSize e MaxValue. |
MaxOutboundConnectionsPerEndpoint |
Intero | 1 | 10 | Numero massimo di connessioni in uscita che possono essere associate a un particolare endpoint. Questa impostazione viene applicata solo a connessioni in pool. |
MaxOutputDelay |
TimeSpan | 0 | 200 ms | Tempo massimo di attesa dopo un'operazione di invio per il raggruppamento di messaggi aggiuntivi in un'unica operazione. I messaggi vengono inviati prima se il buffer del trasporto sottostante è pieno. L'invio di messaggi aggiuntivi non comporta la reimpostazione del periodo di ritardo. |
MaxPendingAccepts |
Intero | 1 | 1 | Numero massimo di canali che possono attendere nel listener prima di essere accettati. Esiste un intervallo di tempo tra il completamento dell'accettazione e l'avvio di una nuova accettazione. L'aumento delle dimensioni di questa raccolta consente di evitare l'eliminazione di client che si connettono durante questo intervallo. |
MaxPendingConnections |
Intero | 1 | 10 | Numero massimo di connessioni che il listener può tenere in attesa di essere accettate dall'applicazione. Quando questo valore della quota viene superato, le nuove connessioni in ingresso vengono eliminate anziché restare in attesa di essere accettate. Le funzionalità di connessione, ad esempio la protezione dei messaggi, possono determinare l'apertura di più connessioni da parte di un client. Gli amministratori del servizio devono tener conto delle connessioni aggiuntive durante l'impostazione di questo valore della quota. |
MaxReceivedMessageSize |
Lungo | 1 | 64 kB | Dimensione massima, in byte, di un messaggio ricevuto, incluse le intestazioni, prima che il trasporto generi un'eccezione. |
OpenTimeout |
TimeSpan | 0 | 1 min | Tempo massimo di attesa per stabilire una connessione prima che il trasporto generi un'eccezione. |
ReceiveTimeout |
TimeSpan | 0 | 10 min | Tempo massimo di attesa per il completamento di un'operazione di lettura prima che il trasporto generi un'eccezione. |
SendTimeout |
TimeSpan | 0 | 1 min | Tempo massimo di attesa per il completamento di un'operazione di scrittura prima che il trasporto generi un'eccezione. |
Le quote del trasporto MaxPendingConnections
e MaxOutboundConnectionsPerEndpoint
sono combinate in un'unica quota del trasporto denominata MaxConnections
se impostate tramite associazione o configurazione. Solo l'elemento di associazione consente di impostare questi valori di quota individualmente. La quota del trasporto MaxConnections
è caratterizzata da valore minimo e valore predefinito uguali.
Le quote del trasporto sono impostate tramite l'elemento di associazione del trasporto, l'associazione del trasporto, la configurazione dell'applicazione o il criterio dell'host. In questo documento non viene esaminata l'impostazione dei trasporti tramite il criterio dell'host. Consultare la documentazione per il trasporto sottostante per scoprire le impostazioni per le quote del criterio dell'host. L'argomento Configurazione di HTTP e HTTPS descrive le impostazioni di quota per il driver Http.sys. Consultare la Microsoft Knowledge Base per ulteriori informazioni sulla configurazione dei limiti di Windows su connessioni HTTP, TCP/IP e named pipe.
Altri tipi di quote vengono applicati indirettamente ai trasporti. Il codificatore di messaggi utilizzato dal trasporto per trasformare un messaggio in byte può disporre di impostazioni delle quote personali. Queste quote, tuttavia, sono indipendenti dal tipo di trasporto utilizzato.
L'impostazione delle quote del trasporto tramite l'elemento di associazione offre la massima flessibilità per il controllo del comportamento del trasporto. Come timeout predefiniti per le operazioni di chiusura, apertura, ricezione e invio vengono utilizzati i valori specificati dall'associazione al momento della generazione di un canale.
Nome | HTTP | TCP/IP | Named pipe |
---|---|---|---|
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 |
L'impostazione delle quote del trasporto tramite l'associazione offre un set semplificato di quote tra cui scegliere e allo stesso tempo consente l'accesso ai valori delle quote più comuni.
Nome | HTTP | TCP/IP | Named pipe |
---|---|---|---|
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 quota del trasporto
MaxBufferSize
è disponibile solo nell'associazioneBasicHttp
. Le associazioniWSHttp
sono valide per scenari che non supportano modalità di trasporto con flussi.Le quote del trasporto
MaxPendingConnections
eMaxOutboundConnectionsPerEndpoint
sono combinate in un'unica quota denominataMaxConnections
.
La configurazione dell'applicazione può impostare le stesse quote del trasporto utilizzate per accedere direttamente alle proprietà in un'associazione. Nei file di configurazione, il nome di una quota del trasporto inizia sempre con una lettera minuscola. La proprietà CloseTimeout
in un'associazione corrisponde all'impostazione closeTimeout
nella configurazione e la proprietà MaxConnections
in un'associazione corrisponde all'impostazione maxConnections
nella configurazione.