Microsoft.AspNetCore.ConcurrencyLimiter パッケージとそのミドルウェアは、ASP.NET Core 11 から削除されました。 ミドルウェアは、レート制限ミドルウェア (Microsoft.AspNetCore.RateLimiting) を優先して、ASP.NET Core 8 では古い形式としてマークされています。これにより、System.Threading.RateLimiting を介して同等のコンカレンシー制限機能が公開されます。
導入されたバージョン
.NET 11 Preview 1
以前の動作
以前は、Microsoft.AspNetCore.ConcurrencyLimiter NuGet パッケージをインストールし、UseConcurrencyLimiter 拡張メソッドをキュー ポリシー (AddQueuePolicy または AddStackPolicy) と共に使用して、同時に実行できる要求の数をバインドできました。
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.ConcurrencyLimiter;
using Microsoft.Extensions.DependencyInjection;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddQueuePolicy(options =>
{
options.MaxConcurrentRequests = 2;
options.RequestQueueLimit = 25;
});
var app = builder.Build();
app.UseConcurrencyLimiter();
app.Run(async context => await context.Response.WriteAsync("Hello World!"));
app.Run();
ミドルウェアからビルド警告が生成され、レート制限ミドルウェアに誘導されましたが、実行時には引き続き機能します。
新しい動作
ASP.NET Core 11 以降では、Microsoft.AspNetCore.ConcurrencyLimiter ミドルウェア ソースが ASP.NET Core リポジトリから削除され、Microsoft.AspNetCore.ConcurrencyLimiter 11.x 以降のパッケージは発行されません。 次の種類とメソッドは、 net11.0を対象とするアプリでは使用できなくなりました。
Microsoft.AspNetCore.ConcurrencyLimiter.ConcurrencyLimiterMiddlewareMicrosoft.AspNetCore.ConcurrencyLimiter.ConcurrencyLimiterOptionsMicrosoft.AspNetCore.ConcurrencyLimiter.IQueuePolicyMicrosoft.AspNetCore.ConcurrencyLimiter.QueuePolicyOptions-
Microsoft.AspNetCore.Builder.ConcurrencyLimiterExtensions(UseConcurrencyLimiter拡張メソッドを含む) -
Microsoft.Extensions.DependencyInjection.QueuePolicyServiceCollectionExtensions(AddQueuePolicyとAddStackPolicyを含む)
既存の 9.x および 10.x パッケージ バージョンは NuGet に残り、 net9.0 または net10.0をターゲットとするプロジェクトでも引き続き動作します。 明示的な PackageReference を受け取り、 net11.0 に再ターゲットするプロジェクトでは、11.x パッケージ バージョンがないため、NuGet 復元エラーが発生します。 これらの型を参照するコードは、ASP.NET Core 11 に対してコンパイルに失敗します。
破壊的変更の種類
この変更は、 バイナリの互換性 と ソースの互換性に影響する可能性があります。
変更の理由
ConcurrencyLimiter ミドルウェアは、ASP.NET Core 8 (診断ASP0025) で廃止されました。これは、より汎用の System.Threading.RateLimiting API に基づいて構築されたレート制限ミドルウェアによって機能がカバーされているためです。 2 つの並列実装を維持すると、メリットのない摩擦が増します。 詳細については、 dotnet/aspnetcore#64020 を参照してください。
推奨されるアクション
レート制限ミドルウェアに移行します。このミドルウェアには、System.Threading.RateLimiting.ConcurrencyLimiter上に構築された同等のコンカレンシー リミッターが用意されています。
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using System.Threading.RateLimiting;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRateLimiter(options =>
{
options.AddConcurrencyLimiter("ConcurrencyPolicy", limiterOptions =>
{
limiterOptions.PermitLimit = 2;
limiterOptions.QueueLimit = 25;
limiterOptions.QueueProcessingOrder = QueueProcessingOrder.OldestFirst;
});
});
var app = builder.Build();
app.UseRateLimiter();
app.MapGet("/", () => "Hello World!").RequireRateLimiting("ConcurrencyPolicy");
app.Run();
すぐに移行できない場合は、Microsoft.AspNetCore.ConcurrencyLimiter 9.x または 10.x NuGet パッケージnet11.0 をターゲットにしたままにできます。 パッケージの新しいバージョンは、.NET 11 以降に出荷されません。
影響を受ける API
Microsoft.AspNetCore.ConcurrencyLimiter.ConcurrencyLimiterMiddlewareMicrosoft.AspNetCore.ConcurrencyLimiter.ConcurrencyLimiterOptionsMicrosoft.AspNetCore.ConcurrencyLimiter.IQueuePolicyMicrosoft.AspNetCore.ConcurrencyLimiter.QueuePolicyOptionsMicrosoft.AspNetCore.Builder.ConcurrencyLimiterExtensions.UseConcurrencyLimiterMicrosoft.Extensions.DependencyInjection.QueuePolicyServiceCollectionExtensions.AddQueuePolicyMicrosoft.Extensions.DependencyInjection.QueuePolicyServiceCollectionExtensions.AddStackPolicy
ASP.NET Core