2016-09-15 4 views
4

Gibt es eine Grenze für die Anzahl gleichzeitiger/paralleler Anforderungen, die Sie mit der Klasse WebClient, HttpWebRequest und HttpClient in .NET 4.5 senden können? Oder können Sie unbegrenzte parallele Anfragen senden, wenn die Web-API oder der Server nicht eingeschränkt ist? Sorry, wenn die Frage zu weit gefasst ist, korrigiere mich bitte, damit ich sie eingrenzen kann.Maximale Anzahl gleichzeitig ablaufender Anforderungen für WebClient, HttpWebRequest und HttpClient

Antwort

14

Ja, es gibt ein Limit. Das Standardverbindungslimit ist 2 gleichzeitige Verbindungen pro Remote-Host. Dies kann überschrieben werden. Ich glaube beispielsweise, dass ASP.NET standardmäßig den Standardwert von 10 Verbindungen pro Remote-Host überschreibt.

Von https://msdn.microsoft.com/en-us/library/7af54za5.aspx:

Die Anzahl der Verbindungen zwischen einem Client und Server kann eine dramatische Auswirkungen auf die Anwendungsdurchsatz haben. Standardmäßig verwendet eine Anwendung mit der HttpWebRequest-Klasse maximal zwei persistente -Verbindungen zu einem bestimmten Server. Sie können jedoch die maximale Anzahl von -Verbindungen pro Anwendung festlegen.

Um die Verbindungsbeschränkung selbst zu ändern, verwenden Sie . Stellen Sie sicher, dass sich diese Änderung kurz nach dem Start Ihres Prozesses ändert, bevor Sie mit dem Herstellen einer HTTP-Verbindung zum Remote-Host beginnen. Dies liegt daran, dass, sobald Sie tatsächlich eine HTTP-Verbindung zu einem Remote-Host hergestellt haben, für diesen Remote-Host unter Verwendung des aktuellen Standardverbindungslimits eine ServicePoint erstellt wird.

Beachten Sie, dass es weitere wirksame Beschränkungen für gleichzeitige Verbindungen gibt, die über die Anforderungen der HTTP-Clientklassen hinausgehen. Wenn Sie beispielsweise eine Million gleichzeitiger Verbindungen öffnen möchten, haben Sie wahrscheinlich nicht genügend Arbeitsspeicher oder Threads oder eine andere Betriebssystemressource. Wenn Sie gegen diese Grenzen stoßen, müssen Sie eine allgemeinere Frage stellen, wie Sie einen .net-Prozess für die Verarbeitung einer großen Anzahl gleichzeitiger E/A-Vorgänge skalieren können. Aber wenn Sie nur ein paar Dutzend Verbindungen öffnen, dann sollte es Ihnen gut gehen.

BTW, wenn Sie neugierig sind, warum die Standardgrenzwerte so niedrig sind, ist es tatsächlich in der HTTP-Spezifikation gebacken - das Ziel war sicherzustellen, dass egoistische HTTP-Clients HTTP-Server mit simultanen Verbindungen nicht überfluteten. Obwohl moderne Browser die Spezifikation ignorieren. Siehe http://www.stevesouders.com/blog/2008/03/20/roundup-on-parallel-connections/ für viel mehr Details zu diesem Thema, als Sie jemals wissen wollten!

+1

Wie können wir dies in .net-Core konfigurieren? 'ServicePointManager' ist kein Ding mehr –

+0

.NET Core 2.0 hat jetzt ServicePointManager, und Sie können es auch direkt auf HttpClient setzen. Siehe meine Antwort hier: https://stackoverflow.com/questions/1361771/max-number-of-concurrent-httpwebrequests/46905342#46905342 – cbp

Verwandte Themen