ASP0028: 代わりに
| 値 | |
|---|---|
| ルール ID | ASP0028 |
| カテゴリ | 使用法 |
| 修正が中断ありか中断なしか | なし |
原因
IPv6をサポートするサーバー コンピューターでは、IPv6AnyAnyAnyがIPv6Anyよりも遅くなる可能性があるため、推奨されます。 場合によっては、 Any がまったく機能しない場合があります。
Any は、 システム型の実装が遅くなる可能性があります。
127.0.0.1 は IPv4 ループバック アドレスです。
::1 は IPv6 ループバック アドレスです。
Any は IPv4 のワイルドカード アドレスです。
IPv6Any は IPv6 のワイルドカード アドレスです。
HTTP/1.x または HTTP/2.0 を使用する場合の IPv6 での現在の動作:
-
localhostは[::1]に解決されます。 -
[::1]は、127.0.0.1を使用して再試行を強制し、繰り返しサイクルを作成するサーバーでは受け入れられません。
上記の条件で Any を使用すると、 ASP0028 診断メッセージが発生します。 これらの条件が発生する可能性があるコードの例を次に示します。
.UseKestrel().ConfigureKestrel(options =>
{
options.Listen(IPAddress.Any, ...);
})
規則の説明
使用可能なすべてのKestrelネットワーク インターフェイスで受信接続をリッスンするようにIPv6を構成するには、IPv6Anyを使用することをお勧めします。
違反の修正方法
問題のあるコードの場合は、 Any を IPv6Anyに置き換えます。
引数を指定せずに ListenAnyIP(Int32) メソッドを使用します。
.UseKestrel().ConfigureKestrel(options =>
{
- options.Listen(IPAddress.Any, ...);
+ options.ListenAnyIP(...);
})
または、 IPv6Any フィールドを使用します。
.UseKestrel().ConfigureKestrel(options =>
{
- options.Listen(IPAddress.Any, ...);
+ options.Listen(IPAddress.IPv6Any, ...);
})
どのようなときに警告を抑制するか
ASP0028診断には、Information レベルの重大度があります。 サーバーで IPv6 の使用を完全に無効にすることを意図している場合は、この警告を抑制しますが、その場合は、この記事で説明されているパフォーマンスの問題が発生する可能性があります。
IPv6 は、システム全体で無効にすることも、 AppCtx スイッチまたは環境変数を介してのみ .NET に対して無効にすることもできます
ASP.NET Core