NCache integriert scheinbar mit dem ASP.NET Core Rahmen. Mit NCache, können wir Anwendungsdaten oder Antworten in unserem ASP zwischenspeichern.NET Core Anwendungen. Schauen wir uns ein anderes an NCache Funktion für ASP.NET Core Anwendungen: Session State Caching mit ASP.NET Core.
HTTP und Sitzungsstatus
Ein bisschen Hintergrund zuerst. HTTP ist ein zustandsloses Protokoll. Dies bedeutet, dass Anfragen voneinander unabhängig sind und Server keine Benutzerdaten von früheren Anfragen enthalten. Wenn wir jedoch Benutzerdaten speichern müssen, während unsere Benutzer durch unsere Webanwendungen navigieren, müssen wir die Benutzerwerte zwischen den Anfragen irgendwie beibehalten.
ASP.NET Core offizielle Dokumentation beschreibt mehrere Ansätze für Staatsverwaltung. Wie unter anderem Cookies, versteckte Felder und Abfragezeichenfolgen.
Um Benutzerdaten zwischen Anforderungen beizubehalten, verwendet ASP.NET Core basiert auf einem Cookie und einem serverseitigen Speichermechanismus. Auf jede Anfrage, ASP.NET Core übergibt ein Cookie mit einer Kennung, um Sitzungsdaten auf der Serverseite abzurufen. Standardmäßig ASP.NET Core verwendet In-Memory-Speicher für Sitzungsdaten.
Die Verwendung von In-Memory-Speicher für Sitzungsdaten hat jedoch einige Nachteile. Falls unser Anwendungsserver offline geht, verlieren wir unsere Sitzungsdaten. Wenn wir unseren Datenverkehr umleiten, werden die Sitzungsdaten nicht am neuen Standort repliziert. Und wenn wir eine Serverfarm haben, müssen wir Sitzungen an bestimmte Anwendungsinstanzen binden, wodurch unsere Anwendung schwer zu skalieren ist.
NCache für das Zwischenspeichern des HTTP-Sitzungsstatus
Wir verwenden NCache für das Zwischenspeichern des Sitzungsstatus.
Mit der NCachespeichern wir unsere Sitzungsdaten auf einem anderen Prozess, genauer gesagt in einem Cluster. Auf diese Weise sind wir nicht durch die Speichermenge auf unserem Anwendungsserver beschränkt. Und wir können unseren Cache-Cluster skalieren, indem wir weitere Server hinzufügen und so unsere Transaktions- und Speicherkapazität erhöhen.
Mit unserer NCache Caching-Topologien und Sitzungsreplikation, wenn unser Anwendungsserver offline geht, haben wir unsere Sitzungsdaten immer noch auf allen Serverknoten verfügbar.
Mit der NCache, können wir unsere Sitzungsdaten in anderen Regionen oder Rechenzentren replizieren. Wir haben beispielsweise Sitzungsdaten für den Fall einer Notfallwiederherstellung immer verfügbar. Sogar wir können Sitzungsdaten am Ort ihrer Erstellung behalten und Sitzungsdaten nur verschieben, wenn wir Datenverkehr zwischen Regionen verschieben, wodurch die Kosten für den Bandbreitenverbrauch niedrig gehalten werden.
Für weitere Vorteile der Verwendung NCache Überprüfen Sie für den Sitzungsstatus ASP.NET Core Caching-Vorteile und Übersicht.
Wir brauchen nur ein paar Codeänderungen, um es zu verwenden NCache für das Zwischenspeichern des Sitzungsstatus. Wir haben zwei Ansätze: verwenden NCache als Session Provider bzw IDistributedCache
Anbieter
Vor der Verwendung NCache Als Sessionanbieter benötigen wir die AspNetCore.Session.NCache
NuGet-Paket und fügen Sie die Alachisoft.NCache.Web.SessionState
Namespace.
Fügen wir hinzu NCache als Sitzungsanbieter für ein .NET 6.0-ASP-Beispiel.NET Core Internetanwendung. So was,
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(); |
Zuerst fügen wir hinzu NCache Dienste für das Zwischenspeichern des Sitzungszustands an den ASP.NET Core Container für Abhängigkeiten. Dafür verwenden wir die AddNCacheSession()
Methode. Es erwartet eine NCacheSessionConfiguration
Objekt. Wir müssen als erforderlichen Parameter einen Cache-Namen übergeben. Optional können wir Protokolle aktivieren (EnableLogs = true
) und übergeben Sie eine Anwendungskennung, um die Sitzungs-ID zwischen den Anwendungen eindeutig zu machen, die dieselben Sitzungsdaten verwenden (SessionAppId = "demoApp"
).
Anstatt diese Parameter manuell zu konfigurieren, können wir die verwenden appsettings.json
Datei und übergeben Sie einen Konfigurationsabschnitt an die AddNCacheSession()
Methode.
Dies ist die appsettings.json
Datei für die Einstellungen aus unserem vorherigen Beispiel,
1 2 3 4 5 6 7 8 |
{ "NCacheSettings": { "CacheName": "demoClusteredCache", "EnableLogs": "true", "SessionAppId": "demoApp" }, // Other settings here... } |
Weitere Einzelheiten zu den Einstellungen NCache für seinen Session Provider hat, check ASP.NET Core Konfiguration des Sitzungsanbieters.
Sobald wir uns registrieren NCache Dienste müssen wir die HTTP-Anforderungspipeline konfigurieren. Wir müssen die hinzufügen UseNCacheSession()
Methode. Behalten wir die Reihenfolge unserer Middleware in der Request-Pipeline im Auge. Wir sollten die hinzufügen NCache Sitzungs-Middleware vor jeder anderen Middleware, die Sitzungsdaten liest.
Zusätzlich nach dem Hinzufügen NCache Services und Middleware greifen wir über die auf unsere Sitzungsdaten zu Http.Session
Klasse innerhalb von Razor-Seiten und MVC-Controllern.
2. NCache IDistributedCache-Implementierung für Sitzungen
Anstatt die AddNCacheSession()
und UseNCacheSession()
Methoden zu registrieren NCache Als Sitzungsanbieter können wir ASP verwenden.NET Core Sitzungen mit NCache IDistributedCache-Implementierung.
Standardmäßig ASP.NET Core hat der AddDistributedMemoryCache()
-Methode zum Registrieren einer In-Memory-Implementierung der IDistributedCache
.
Anstatt diese Implementierung zu verwenden, fügen wir die hinzu NCache Umsetzung mit der AddNCacheDistributedCache()
Methode.
Diesmal installieren wir die NCache.Microsoft.Extensions.Caching
NuGet-Paket und verwenden Sie die Alachisoft.NCache.Caching.Distributed
Namensraum. Lassen Sie uns die Verwendung unserer vorherigen Beispiel-Webanwendung ändern NCache IDistributedCache
Implementierung,
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(); |
Beachten Sie, anstatt die zu registrieren NCache Services und Middleware für das Session State Caching verwenden wir ASP.NET Core AddSession()
und UseSession()
Methoden. Wir spezifizieren jedoch eine andere verteilte Cache-Implementierung. Der aus NCache.
So verwenden Sie die AddNCacheDistributedCache()
-Methode müssen wir den Cache-Namen als erforderlichen Parameter übergeben. Auch hier können wir die verwenden appsetttings.json
Datei stattdessen. Optional können wir Protokolle und Ausnahmen aktivieren und das Zeitlimit für Anforderungen und Wiederholungsversuche ändern. Für alle verfügbaren Konfigurationsoptionen für IDistributedCache
Umsetzung, prüfen ASP konfigurieren.NET Core IDistributedCache.
Nach diesen Schritten können wir über die auf unsere Sitzungsdaten zugreifen Http.Session
.
Zusammenfassung
So können wir unser ASP skalieren.NET Core Anwendungen mit Session State Caching mit NCache. Folglich mit nur wenigen Codeänderungen und Konfigurationen in unseren Anwendungen.
NCache hat mehr Funktionen für die Zustandsverwaltung. Zum Beispiel, NCache funktioniert wie ein ASP für mehrere Regionen.NET Core Sitzungsanbieter. Darüber hinaus können wir im Falle einer Notfallwiederherstellung oder Verkehrsumleitung unsere Sitzungsdaten replizieren, um den Verlust unserer Sitzungsdaten zu vermeiden.
Darüber hinaus für Anwendungen mit älteren Codebasen, die noch ASP verwenden.NET Framework neben dem neuen ASP.NET Core, Wir können konfigurieren NCache um Sitzungen zwischen den beiden Frameworks zu teilen.
Also schau mal genauer hin NCache für Sitzungs-Caching durch Überprüfen NCache Offizielles GitHub-Repo für eine Beispielanwendung, die Session-Caching verwendet, um ein Ratespiel zu erstellen.