Przydziały dla transportu
Limity przydziału transportu są mechanizmem zasad podejmowania decyzji, gdy połączenie zużywa nadmierne zasoby. Limit przydziału to sztywny limit uniemożliwiający użycie dodatkowych zasobów po przekroczeniu wartości przydziału. Limity przydziału transportu uniemożliwiają złośliwe lub niezamierzone ataki typu "odmowa usługi".
Transporty programu Windows Communication Foundation (WCF) mają domyślne wartości przydziału oparte na konserwatywnej alokacji zasobów. Te wartości domyślne są odpowiednie dla środowisk deweloperskich i małych scenariuszy instalacji. Administratorzy usług powinni przejrzeć limity przydziału transportu i dostroić poszczególne wartości przydziału, jeśli instalacja zabraknie zasobów lub jeśli połączenia są ograniczone pomimo dostępności dodatkowych zasobów.
Typy przydziałów transportu
Transporty WCF mają trzy typy przydziałów:
Limity czasu ograniczają ataki typu "odmowa usługi", które polegają na wiązaniu zasobów przez dłuższy czas.
Limity alokacji pamięci uniemożliwiają wyczerpanie pamięci systemowej przez pojedyncze połączenie i odmawianie usługi innym połączeniom.
Limity rozmiaru kolekcji ograniczają zużycie zasobów, które pośrednio przydzielają pamięć lub są ograniczone.
Opisy przydziałów transportu
W tej sekcji opisano przydziały transportu dostępne dla standardowych transportów WCF: HTTP(S), TCP/IP i nazwanych potoków. Transporty niestandardowe mogą uwidaczniać własne konfigurowalne limity przydziału, które nie są uwzględnione na tej liście. Zapoznaj się z dokumentacją dotyczącą transportu niestandardowego, aby dowiedzieć się więcej o jego limitach przydziału.
Każde ustawienie limitu przydziału ma typ, wartość minimalną i wartość domyślną. Maksymalna wartość limitu przydziału jest ograniczona przez jego typ. Ze względu na ograniczenia maszyny nie zawsze można ustawić limit przydziału na wartość maksymalną.
Nazwisko | Typ | Min. wartość |
Wartość domyślna wartość |
Opis |
---|---|---|---|---|
ChannelInitializationTimeout |
przedział_czasu | 1 znacznik | 5 sek | Maksymalny czas oczekiwania na połączenie, aby wysłać preambułę podczas początkowego odczytu. Te dane są odbierane przed wystąpieniem uwierzytelniania. To ustawienie jest zazwyczaj znacznie mniejsze niż wartość limitu przydziału ReceiveTimeout . |
CloseTimeout |
przedział_czasu | 0 | 1 min | Maksymalny czas oczekiwania na zamknięcie połączenia przed wystąpieniem wyjątku. |
ConnectionBufferSize |
Integer | 1 | 8 KB | Rozmiar w bajtach buforów transmisji i odbierania bazowego transportu. Zwiększenie rozmiaru buforu może zwiększyć przepływność podczas wysyłania dużych komunikatów. |
IdleTimeout |
przedział_czasu | 0 | 2 min | Maksymalny czas bezczynności połączenia w puli może pozostać bezczynny przed zamknięciem. To ustawienie dotyczy tylko połączeń w puli. |
LeaseTimeout |
przedział_czasu | 0 | 5 min | Maksymalny okres istnienia aktywnego połączenia w puli. Po upływie określonego czasu połączenie zostanie zamknięte po wykonaniu bieżącego żądania. To ustawienie dotyczy tylko połączeń w puli. |
ListenBacklog |
Integer | 1 | 10 | Maksymalna liczba połączeń, które odbiornik może mieć nieusługowane przed odmową dodatkowych połączeń z tym punktem końcowym. |
MaxBufferPoolSize |
Długi | 0 | 512 KB | Maksymalna ilość pamięci (w bajtach) poświęcana transportowi na bufory komunikatów wielokrotnego użytku. Gdy pula nie może dostarczyć buforu komunikatów, nowy bufor jest przydzielany do użytku tymczasowego. Instalacje tworzące wiele fabryk kanałów lub odbiorników mogą przydzielić duże ilości pamięci dla pul buforów. Zmniejszenie tego rozmiaru buforu może znacznie zmniejszyć użycie pamięci w tym scenariuszu. |
MaxBufferSize |
Integer | 1 | 64 KB | Maksymalny rozmiar (w bajtach) buforu używanego do przesyłania strumieniowego danych. Jeśli ten limit przydziału transportu nie jest ustawiony lub transport nie korzysta z przesyłania strumieniowego, wartość przydziału jest taka sama jak mniejsza MaxReceivedMessageSize z wartości przydziału i MaxValue. |
MaxOutboundConnectionsPerEndpoint |
Integer | 1 | 10 | Maksymalna liczba połączeń wychodzących, które mogą być skojarzone z określonym punktem końcowym. To ustawienie dotyczy tylko połączeń w puli. |
MaxOutputDelay |
przedział_czasu | 0 | 200 ms | Maksymalny czas oczekiwania po operacji wysyłania wsadowych dodatkowych komunikatów w ramach jednej operacji. Komunikaty są wysyłane wcześniej, jeśli bufor transportu bazowego stanie się pełny. Wysyłanie dodatkowych komunikatów nie powoduje zresetowania okresu opóźnienia. |
MaxPendingAccepts |
Integer | 1 | 1 | Maksymalna liczba akceptowanych kanałów, na które może czekać odbiornik. Istnieje przedział czasu między zakończeniem akceptowania a rozpoczęciem nowej akceptacji. Zwiększenie tego rozmiaru kolekcji może uniemożliwić klientom nawiązywanie połączenia w tym interwale. |
MaxPendingConnections |
Integer | 1 | 10 | Maksymalna liczba połączeń, które odbiornik może oczekiwać na zaakceptowanie przez aplikację. Gdy ta wartość limitu przydziału zostanie przekroczona, nowe połączenia przychodzące zostaną porzucone zamiast czekać na zaakceptowanie. Połączenie funkcje, takie jak zabezpieczenia komunikatów, mogą spowodować otwarcie przez klienta więcej niż jednego połączenia. Administratorzy usługi powinni uwzględnić te dodatkowe połączenia podczas ustawiania tej wartości limitu przydziału. |
MaxReceivedMessageSize |
Długi | 1 | 64 KB | Maksymalny rozmiar w bajtach odebranego komunikatu, w tym nagłówki, zanim transport zgłosi wyjątek. |
OpenTimeout |
przedział_czasu | 0 | 1 min | Maksymalny czas oczekiwania na nawiązanie połączenia przed wystąpieniem wyjątku. |
ReceiveTimeout |
przedział_czasu | 0 | 10 minut | Maksymalny czas oczekiwania na ukończenie operacji odczytu przed wystąpieniem wyjątku. |
SendTimeout |
Zakres czasu | 0 | 1 min | Maksymalny czas oczekiwania na ukończenie operacji zapisu przed wystąpieniem wyjątku. |
Limity przydziału MaxPendingConnections
transportu i MaxOutboundConnectionsPerEndpoint
są łączone w jeden limit przydziału transportu wywoływany MaxConnections
podczas ustawiania za pośrednictwem powiązania lub konfiguracji. Tylko element powiązania umożliwia ustawienie tych wartości przydziału indywidualnie. Limit MaxConnections
przydziału transportu ma te same wartości minimalne i domyślne.
Ustawianie limitów przydziału transportu
Limity przydziału transportu są ustawiane za pomocą elementu powiązania transportu, powiązania transportu, konfiguracji aplikacji lub zasad hosta. Ten dokument nie obejmuje ustawiania transportu za pośrednictwem zasad hosta. Zapoznaj się z dokumentacją transportu bazowego, aby odnaleźć ustawienia limitów przydziałów zasad hosta. W temacie Konfigurowanie protokołu HTTP i HTTPS opisano ustawienia limitu przydziału dla sterownika Http.sys. Wyszukaj bazę wiedzy Microsoft Knowledge Base, aby uzyskać więcej informacji na temat konfigurowania limitów systemu Windows dla połączeń HTTP, TCP/IP i nazwanych potoków.
Inne typy przydziałów mają zastosowanie pośrednio do transportu. Koder komunikatów używany przez transport do przekształcania komunikatu w bajty może mieć własne ustawienia limitu przydziału. Jednak te limity przydziału są niezależne od typu używanego transportu.
Kontrolowanie limitów przydziałów transportu z elementu powiązania
Ustawianie limitów przydziałów transportu za pośrednictwem elementu powiązania zapewnia największą elastyczność w kontrolowaniu zachowania transportu. Domyślne limity czasu dla operacji Zamykanie, Otwieranie, Odbieranie i Wysyłanie są pobierane z powiązania podczas tworzenia kanału.
Nazwisko | HTTP | TCP/IP | Nazwany potok |
---|---|---|---|
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 |
Kontrolowanie limitów przydziałów transportu z powiązania
Ustawianie limitów przydziału transportu za pośrednictwem powiązania oferuje uproszczony zestaw przydziałów do wyboru, jednocześnie zapewniając dostęp do najbardziej typowych wartości przydziału.
Nazwisko | HTTP | TCP/IP | Nazwany potok |
---|---|---|---|
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 |
Limit
MaxBufferSize
przydziału transportu jest dostępny tylko w powiązaniuBasicHttp
. PowiązaniaWSHttp
są przeznaczone dla scenariuszy, które nie obsługują strumieniowych trybów transportu.Limity przydziału
MaxPendingConnections
transportu iMaxOutboundConnectionsPerEndpoint
są łączone w jeden limit przydziału transportu o nazwieMaxConnections
.
Kontrolowanie przydziałów transportu z konfiguracji
Konfiguracja aplikacji może ustawić te same limity przydziału transportu, co bezpośrednie uzyskiwanie dostępu do właściwości w powiązaniu. W plikach konfiguracji nazwa limitu przydziału transportu zawsze zaczyna się od małej litery. Na przykład CloseTimeout
właściwość powiązania odpowiada closeTimeout
ustawieniu w konfiguracji, a MaxConnections
właściwość powiązania odpowiada maxConnections
ustawieniu w konfiguracji.