NCache ASPと一見統合する.NET Core フレームワーク。 と NCache、ASP でアプリケーション データまたは応答をキャッシュできます。.NET Core アプリケーション。 もう一つ見てみましょう NCache ASP の機能.NET Core アプリケーション: ASP を使用したセッション状態のキャッシュ.NET Core.
HTTP とセッション状態
最初に少し背景を。 HTTP はステートレス プロトコルです。 これは、リクエストが互いに独立していることを意味し、サーバーは以前のリクエストからのユーザー データを保持しません。 ただし、ユーザーが Web アプリケーションをナビゲートしている間にユーザー データを保存する必要がある場合は、リクエスト間でユーザーの値を保持する必要があります。
ASP.NET Core 公式ドキュメントには、 状態管理. Cookie、非表示フィールド、クエリ文字列などと同様です。
要求間でユーザー データを永続化するには、ASP.NET Core Cookie とサーバー側のストレージ メカニズムに依存しています。 すべての要求で、ASP.NET Core サーバー側でセッション データを取得するための識別子を含む Cookie を渡します。 デフォルトでは、ASP.NET Core セッション データにインメモリ ストレージを使用します。
ただし、セッション データにインメモリ ストレージを使用すると、いくつかの欠点があります。 アプリケーション サーバーがオフラインになると、セッション データが失われます。 トラフィックを再ルーティングすると、セッション データが新しい場所にレプリケートされません。 また、サーバー ファームがある場合、セッションを特定のアプリケーション インスタンスに結び付ける必要があるため、アプリケーションのスケーリングが難しくなります。
NCache HTTP セッション状態のキャッシュ用
我々は使用することができます NCache セッション状態のキャッシュ用。
NCache、正確には、クラスター内の別のプロセスにセッションデータを保存します。 このようにして、アプリケーション サーバーのメモリ量に制限されることはありません。 また、キャッシュ クラスターにサーバーを追加することでキャッシュ クラスターをスケーリングし、トランザクションとストレージの容量を増やすことができます。
おかげ NCache キャッシングトポロジ セッション レプリケーション。アプリケーション サーバーがオフラインになった場合でも、すべてのサーバー ノードでセッション データを利用できます。
NCache、他の地域またはデータセンター間でセッションデータを複製できます. たとえば、障害復旧の場合に備えて、常にセッション データを利用できます。 セッション データをその作成場所に保持し、リージョン間でトラフィックを移動する場合にのみセッション データを移動することもできるため、帯域幅の消費コストを低く抑えることができます。
使用のより多くの利点のために NCache セッション状態については、チェックしてください ASP.NET Core キャッシングのメリットと概要.
使用するために必要なコードの変更はわずかです NCache セッション状態のキャッシュ用。 XNUMX つのアプローチがあります。 NCache セッションプロバイダーとして、または IDistributedCache
プロバイダ。
使用する前に NCache セッションプロバイダーとして、 AspNetCore.Session.NCache
NuGet パッケージを追加して、 Alachisoft.NCache.Web.SessionState
名前空間
追加しましょう NCache サンプル .NET 6.0 ASP へのセッション プロバイダーとして.NET Core ウェブアプリケーション。 このような、
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
using Alachisoft.NCache.Web.SessionState; var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); // 1. Add NCache as a Session Provider builder.Services.AddNCacheSession(config => { config.CacheName = "demoClusteredCache"; // To log all error information. (Optional) config.EnableLogs = true; // An identifier to make SessionId unique between applications. (Optional) config.SessionAppId = "demoApp"; }); // Alternatively, read settings from the appsettings.json file // //var ncacheSettingsSection = builder.Configuration.GetSection("NCacheSettings"); //builder.Services.AddNCacheSession(ncacheSettingsSection); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); } app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); // 2. Store NCache session data app.UseNCacheSession(); app.MapRazorPages(); app.MapDefaultControllerRoute(); app.Run(); |
まず、追加します NCache セッション状態を ASP にキャッシュするためのサービス.NET Core 依存関係コンテナー。 そのために、 AddNCacheSession()
方法。 それは NCacheSessionConfiguration
物体。 必須パラメーターとしてキャッシュ名を渡す必要があります。 オプションで、ログを有効にすることができます (EnableLogs = true
)、アプリケーション識別子を渡して、同じセッション データを使用するアプリケーション間でセッション ID を一意にします (SessionAppId = "demoApp"
).
これらのパラメーターを手動で構成する代わりに、 appsettings.json
ファイルを開き、構成セクションを AddNCacheSession()
方法。
これは appsettings.json
前の例の設定のファイル、
1 2 3 4 5 6 7 8 |
{ "NCacheSettings": { "CacheName": "demoClusteredCache", "EnableLogs": "true", "SessionAppId": "demoApp" }, // Other settings here... } |
設定の詳細については NCache そのセッション プロバイダーを持っている場合は、確認してください ASP.NET Core セッションプロバイダーの構成.
登録したら NCache サービスでは、HTTP リクエスト パイプラインを構成する必要があります。 追加する必要があります UseNCacheSession()
方法。 リクエスト パイプラインでのミドルウェアの順序に注目しましょう。 追加する必要があります NCache セッション データを読み取る他のミドルウェアの前にセッション ミドルウェアを配置します。
さらに、追加後、 NCache サービスとミドルウェアを使用して、セッション データにアクセスします。 Http.Session
Razor ページと MVC コントローラー内のクラス。
2. NCache セッションの IDistributedCache 実装
を使用する代わりに AddNCacheSession()
& UseNCacheSession()
メソッド 登録するために NCache セッション プロバイダーとして、ASP を使用できます。.NET Core とのセッション NCache IDistributedCache の実装.
デフォルトでは、ASP.NET Core があります AddDistributedMemoryCache()
のメモリ内実装を登録するメソッド IDistributedCache
.
その実装を使用する代わりに、追加しましょう NCache を使用した実装 AddNCacheDistributedCache()
方法。
今回は、 NCache.Microsoft.Extensions.Caching
NuGet パッケージを使用して、 Alachisoft.NCache.Caching.Distributed
名前空間。 以前のサンプル Web アプリケーションを使用するように変更しましょう NCache IDistributedCache
実装、
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
using Alachisoft.NCache.Caching.Distributed; var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); // 1. Add NCache Distributed Cache implementation builder.Services.AddNCacheDistributedCache(config => { config.CacheName = "demoClusteredCache"; // To log all error information. (Optional) config.EnableLogs = true; }); // 2. Add ASP.NET Core Session services builder.Services.AddSession(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); } app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); // 3. Add ASP.NET Core Session middleware app.UseSession(); app.MapRazorPages(); app.MapDefaultControllerRoute(); app.Run(); |
注意、登録する代わりに NCache セッション状態キャッシュ用のサービスとミドルウェア、ASP を使用.NET Core AddSession()
& UseSession()
メソッド。 ただし、別の分散キャッシュの実装を指定します。 からのもの NCache.
使用するには AddNCacheDistributedCache()
メソッドでは、必須パラメーターとしてキャッシュ名を渡す必要があります。 繰り返しますが、使用できます appsetttings.json
代わりにファイル。 オプションで、ログと例外を有効にし、リクエストのタイムアウトと再試行を変更できます。 で使用可能なすべての構成オプションについて IDistributedCache
実装、チェック ASPを構成する.NET Core I分散キャッシュ.
これらの手順の後、次を使用してセッション データにアクセスできます。 Http.Session
.
まとめ
これが ASP を拡張する方法です.NET Core セッション状態キャッシュを使用するアプリケーション NCache. その結果、アプリケーションのコードの変更と構成がわずかで済みます。
NCache 状態管理のためのより多くの機能があります。 例えば、 NCache のように動作します マルチリージョンASP.NET Core セッションプロバイダー. さらに、災害復旧またはトラフィックの再ルーティングの場合、セッション データを複製して、セッション データが失われないようにすることができます。
さらに、ASP を使用している従来のコードベースを持つアプリケーションの場合.NET Framework 新しいASPと並んで.NET Core、我々はできる configure NCache XNUMX つのフレームワーク間でセッションを共有する.
では、詳しく見てみましょう NCache チェックによるセッションキャッシング NCache GitHub 公式リポジトリ セッション キャッシングを使用して推測ゲームを構築するサンプル アプリケーションの場合。