Dela via


Transportkvoter

Transportkvoter är en principmekanism för att avgöra när en anslutning förbrukar överdrivna resurser. En kvot är en hård gräns som förhindrar användning av ytterligare resurser när kvotvärdet har överskridits. Transportkvoter förhindrar antingen skadliga eller oavsiktliga överbelastningsattacker.

Windows Communication Foundation-transporter (WCF) har standardkvotvärden som baseras på en konservativ resursallokering. Dessa standardvärden är lämpliga för utvecklingsmiljöer och små installationsscenarier. Tjänstadministratörer bör granska transportkvoter och justera enskilda kvotvärden om en installation får slut på resurser eller om anslutningarna begränsas trots tillgängligheten för ytterligare resurser.

Typer av transportkvoter

WCF-transporter har tre typer av kvoter:

  • Tidsgränser minskar överbelastningsattacker som förlitar sig på att binda upp resurser under en längre tid.

  • Minnesallokeringsgränser förhindrar att en enskild anslutning uttömmer systemminnet och nekar tjänsten till andra anslutningar.

  • Storleksbegränsningar för samlingen begränsar förbrukningen av resurser som indirekt allokerar minne eller är i begränsad tillgång.

Beskrivningar av transportkvot

I det här avsnittet beskrivs de transportkvoter som är tillgängliga för standard-WCF-transporter: HTTP(S), TCP/IP och namngivna rör. Anpassade transporter kan exponera sina egna konfigurerbara kvoter som inte ingår i den här listan. Läs dokumentationen för en anpassad transport för att ta reda på om dess kvoter.

Varje kvotinställning har en typ, ett minimivärde och ett standardvärde. Det maximala värdet för en kvot begränsas av dess typ. På grund av maskinbegränsningar är det inte alltid möjligt att ange en kvot till dess maximala värde.

Namn Type Min.

värde
Default

värde
beskrivning
ChannelInitializationTimeout TimeSpan 1 tick 5 sek Maximal tid att vänta på att en anslutning ska skicka ingressen under den första läsningen. Dessa data tas emot innan autentisering sker. Den här inställningen är vanligtvis mycket mindre än ReceiveTimeout kvotvärdet.
CloseTimeout TimeSpan 0 1 min Maximal tid att vänta tills en anslutning stängs innan transporten genererar ett undantag.
ConnectionBufferSize Integer 1 8 kB Storlek, i byte, på överförings- och mottagningsbuffertar för den underliggande transporten. Om du ökar buffertstorleken kan dataflödet förbättras när stora meddelanden skickas.
IdleTimeout TimeSpan 0 2 min Maximal tid som en poolanslutning kan vara inaktiv innan den stängs.

Den här inställningen gäller endast för poolanslutningar.
LeaseTimeout TimeSpan 0 5 min Maximal livslängd för en aktiv poolanslutning. När den angivna tiden har gått stängs anslutningen när den aktuella begäran har betjänats.

Den här inställningen gäller endast för poolanslutningar.
ListenBacklog Integer 1 10 Maximalt antal anslutningar som lyssnaren kan ha otjänst innan ytterligare anslutningar till slutpunkten nekas.
MaxBufferPoolSize Long 0 512 kB Maximalt minne, i byte, som transporten ägnar åt att poola återanvändbara meddelandebuffertar. När poolen inte kan ange en meddelandebuffert allokeras en ny buffert för tillfällig användning.

Installationer som skapar många kanalfabriker eller lyssnare kan allokera stora mängder minne för buffertpooler. Att minska den här buffertstorleken kan avsevärt minska minnesanvändningen i det här scenariot.
MaxBufferSize Integer 1 64 KB Maximal storlek, i byte, för en buffert som används för strömmande data. Om den här transportkvoten inte har angetts, eller om transporten inte använder direktuppspelning, är kvotvärdet detsamma som det mindre av MaxReceivedMessageSize kvotvärdet och MaxValue.
MaxOutboundConnectionsPerEndpoint Integer 1 10 Maximalt antal utgående anslutningar som kan associeras med en viss slutpunkt.

Den här inställningen gäller endast för poolanslutningar.
MaxOutputDelay TimeSpan 0 200 ms Maximal tid att vänta efter en sändningsåtgärd för batchbearbetning av ytterligare meddelanden i en enda åtgärd. Meddelanden skickas tidigare om bufferten för den underliggande transporten blir full. Om du skickar ytterligare meddelanden återställs inte fördröjningsperioden.
MaxPendingAccepts Integer 1 1 Maximalt antal accepteranden för kanaler som lyssnaren kan ha väntande.

Det finns ett tidsintervall mellan att acceptera slutförandet och en ny acceptstart. Om du ökar samlingens storlek kan du förhindra att klienter som ansluter under det här intervallet tas bort.
MaxPendingConnections Integer 1 10 Maximalt antal anslutningar som lyssnaren kan ha väntar på att godkännas av programmet. När det här kvotvärdet överskrids tas nya inkommande anslutningar bort i stället för att vänta på att accepteras.

Anslut ionsfunktioner som meddelandesäkerhet kan göra att en klient öppnar mer än en anslutning. Tjänstadministratörer bör ta hänsyn till dessa ytterligare anslutningar när de anger det här kvotvärdet.
MaxReceivedMessageSize Long 1 64 KB Maximal storlek i byte för ett mottaget meddelande, inklusive rubriker, innan transporten genererar ett undantag.
OpenTimeout TimeSpan 0 1 min Maximal tid att vänta på att en anslutning upprättas innan transporten skapar ett undantag.
ReceiveTimeout TimeSpan 0 10 min Maximal tid att vänta tills en läsåtgärd har slutförts innan transporten skapar ett undantag.
SendTimeout Tidsintervall 0 1 min Maximal tid att vänta tills en skrivåtgärd har slutförts innan transporten skapar ett undantag.

Transportkvoterna MaxPendingConnections och MaxOutboundConnectionsPerEndpoint kombineras till en enda transportkvot som anropas MaxConnections när de anges via bindningen eller konfigurationen. Endast bindningselementet tillåter att dessa kvotvärden anges individuellt. Transportkvoten MaxConnections har samma minimi- och standardvärden.

Ange transportkvoter

Transportkvoter anges via transportbindningselementet, transportbindningen, programkonfigurationen eller värdprincipen. Det här dokumentet beskriver inte hur du ställer in transporter via värdprincipen. Läs dokumentationen för den underliggande transporten för att identifiera inställningarna för värdprincipkvoter. I avsnittet Konfigurera HTTP och HTTPS beskrivs kvotinställningar för drivrutinen för Http.sys. Sök i Microsoft Knowledge Base efter mer information om hur du konfigurerar Windows-gränser för HTTP, TCP/IP och namngivna pipe-anslutningar.

Andra typer av kvoter gäller indirekt för transporter. Meddelandekodaren som transporten använder för att omvandla ett meddelande till byte kan ha egna kvotinställningar. Dessa kvoter är dock oberoende av vilken typ av transport som används.

Kontrollera transportkvoter från bindningselementet

Att ange transportkvoter via bindningselementet ger den största flexibiliteten när det gäller att kontrollera transportens beteende. Standardtidsgränsen för åtgärderna Stäng, Öppna, Ta emot och Skicka tas från bindningen när en kanal skapas.

Name HTTP TCP/IP Namngivet rör
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

Kontrollera transportkvoter från bindningen

Att ställa in transportkvoter via bindningen ger en förenklad uppsättning kvoter att välja mellan samtidigt som man ger tillgång till de vanligaste kvotvärdena.

Name HTTP TCP/IP Namngivet rör
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. Transportkvoten MaxBufferSize är endast tillgänglig för bindningen BasicHttp . Bindningarna WSHttp är till för scenarier som inte stöder strömmade transportlägen.

  2. Transportkvoterna MaxPendingConnections och MaxOutboundConnectionsPerEndpoint kombineras till en enda transportkvot som kallas MaxConnections.

Kontrollera transportkvoter från konfigurationen

Programkonfigurationen kan ange samma transportkvoter som direktåtkomst till egenskaper för en bindning. I konfigurationsfiler börjar namnet på en transportkvot alltid med en gemen bokstav. Egenskapen för en bindning motsvarar till exempel CloseTimeout inställningen i konfigurationen MaxConnections och egenskapen på en bindning motsvarar inställningen i konfigurationenmaxConnections.closeTimeout

Se även