Teilen über


ASP0028: Erwägen Sie die Verwendung IPAddress.IPv6Any anstelle von IPAddress.Any

Wert
Regel-ID ASP0028
Kategorie Verwendung
Fix führt oder führt nicht zur Unterbrechung Nicht unterbrechend

Ursache

Auf dem Servercomputer, der IPv6Any unterstütztIPv6, wird "Any" bevorzugt, kann. In einigen Fällen Any funktioniert dies möglicherweise gar nicht. Any kann aufgrund der zugrunde liegenden Systemtypenimplementierung langsamer sein.

127.0.0.1 ist die IPv4-Loopbackadresse. ::1 ist die IPv6-Loopbackadresse. Any ist die Wildcardadresse für IPv4. IPv6Any ist die Wildcardadresse für IPv6.

Aktuelles Verhalten mit IPv6 bei Verwendung von HTTP/1.x oder HTTP/2.0:

  • localhost wird in [::1].
  • [::1] wird vom Server nicht akzeptiert, wodurch ein Wiederholungsversuche 127.0.0.1erzwungen wird, wodurch ein wiederholter Zyklus erstellt wird.

Die Verwendung Any mit den vorherigen Bedingungen bewirkt, dass die ASP0028 Diagnosenachricht angezeigt wird. Hier ist ein Beispiel für den Code, der zu diesen Bedingungen führen kann:

.UseKestrel().ConfigureKestrel(options =>
{ 
    options.Listen(IPAddress.Any, ...);
})

Regelbeschreibung

Die empfohlene Methode zum Konfigurieren Kestrel der Überwachung eingehender Verbindungen auf allen verfügbaren IPv6 Netzwerkschnittstellen ist mit IPv6Any.

Behandeln von Verstößen

Ersetzen Sie für den problematischen Code durch AnyIPv6Any.

Verwenden Sie die ListenAnyIP(Int32) Methode ohne Angabe von Argumenten:

.UseKestrel().ConfigureKestrel(options =>
{ 
-   options.Listen(IPAddress.Any, ...);
+   options.ListenAnyIP(...);
})

Oder verwenden Sie das IPv6Any Feld:

.UseKestrel().ConfigureKestrel(options =>
{ 
-   options.Listen(IPAddress.Any, ...);
+   options.Listen(IPAddress.IPv6Any, ...);
})

Wann sollten Warnungen unterdrückt werden?

Die ASP0028 Diagnose weist den Schweregrad der Informationsebene auf. Unterdrücken Sie diese Warnung, wenn Sie beabsichtigen, die Verwendung vollständig auf dem Server zu deaktivieren IPv6 , obwohl dies die in diesem Artikel erwähnten Leistungsprobleme gefährdet.

IPv6 kann entweder systemweit oder nur für .NET über den AppCtx-Switch oder die Umgebungsvariable deaktiviert werden.