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
  1. Limit MaxBufferSize przydziału transportu jest dostępny tylko w powiązaniu BasicHttp . Powiązania WSHttp są przeznaczone dla scenariuszy, które nie obsługują strumieniowych trybów transportu.

  2. Limity przydziału MaxPendingConnections transportu i MaxOutboundConnectionsPerEndpoint są łączone w jeden limit przydziału transportu o nazwie MaxConnections.

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.

Zobacz też