NCache se integra aparentemente con el ASP.NET Core estructura. Con NCache, podemos almacenar en caché los datos de la aplicación o las respuestas en nuestro ASP.NET Core aplicaciones Echemos un vistazo a otro NCache función para ASP.NET Core aplicaciones: Caché de estado de sesión con ASP.NET Core.
HTTP y estado de sesión
Un poco de historia primero. HTTP es un protocolo sin estado. Significa que las solicitudes son independientes entre sí y los servidores no almacenan datos de usuario de solicitudes anteriores. Pero, si necesitamos almacenar datos de usuario mientras nuestros usuarios navegan a través de nuestras aplicaciones web, debemos mantener de alguna manera los valores de usuario entre solicitudes.
ASP.NET Core La documentación oficial describe varios enfoques para administración del Estado. Como cookies, campos ocultos y cadenas de consulta, entre otros.
Para persistir datos de usuario entre solicitudes, ASP.NET Core se basa en una cookie y un mecanismo de almacenamiento del lado del servidor. En cada solicitud, ASP.NET Core pasa una cookie con un identificador para obtener datos de sesión en el lado del servidor. Por defecto, ASP.NET Core utiliza el almacenamiento en memoria para los datos de la sesión.
Pero usar almacenamiento en memoria para datos de sesión tiene algunos inconvenientes. En caso de que nuestro servidor de aplicaciones se desconecte, perderemos los datos de nuestra sesión. Si redirigimos nuestro tráfico, no obtenemos los datos de la sesión replicados en la nueva ubicación. Y, si tenemos una granja de servidores, necesitamos vincular las sesiones a instancias de aplicaciones específicas, lo que hace que nuestra aplicación sea difícil de escalar.
NCache para almacenamiento en caché de estado de sesión HTTP
Podemos utilizar NCache para el almacenamiento en caché del estado de la sesión.
Con NCache, almacenamos nuestros datos de sesión en un proceso diferente, en un clúster, para ser precisos. De esta forma, no estamos limitados por la cantidad de memoria en nuestro servidor de aplicaciones. Y podemos escalar nuestro clúster de caché al agregarle más servidores, aumentando nuestra capacidad de transacción y almacenamiento.
Gracias a NCache topologías de almacenamiento en caché y replicación de sesiones, si nuestro servidor de aplicaciones se desconecta, todavía tenemos nuestros datos de sesión disponibles en todos los nodos del servidor.
Con NCache, podemos replicar nuestros datos de sesión en otras regiones o centros de datos. Siempre tenemos datos de sesión disponibles en caso de recuperación de desastres, por ejemplo. Incluso podemos mantener los datos de la sesión en el lugar de su creación y mover los datos de la sesión solo cuando movemos el tráfico entre regiones, manteniendo bajos los costos de consumo de ancho de banda.
Para obtener más beneficios de usar NCache para el estado de la sesión, marque ASP.NET Core Beneficios y descripción general del almacenamiento en caché.
Solo necesitamos algunos cambios de código para usar NCache para el almacenamiento en caché del estado de la sesión. Tenemos dos enfoques: usar NCache como proveedor de sesión o IDistributedCache
Proveedor.
Antes de utilizar NCache como proveedor de sesión, necesitamos la AspNetCore.Session.NCache
paquete NuGet y agregue el Alachisoft.NCache.Web.SessionState
espacio de nombres
Agreguemos NCache como proveedor de sesión para una muestra de .NET 6.0 ASP.NET Core Aplicación web. Como esto,
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(); |
Primero, agregamos NCache servicios para el almacenamiento en caché del estado de la sesión en el ASP.NET Core contenedor de dependencias. Para eso, usamos el AddNCacheSession()
método. Se espera un NCacheSessionConfiguration
objeto. Necesitamos pasar como parámetro requerido un nombre de caché. Opcionalmente podemos habilitar los registros (EnableLogs = true
) y pase un identificador de aplicación para hacer que el ID de sesión sea único entre las aplicaciones que usan los mismos datos de sesión (SessionAppId = "demoApp"
).
En lugar de configurar manualmente estos parámetros, podemos usar el appsettings.json
archivo y pasar una sección de configuración al AddNCacheSession()
método.
Este es el appsettings.json
archivo para la configuración de nuestro ejemplo anterior,
1 2 3 4 5 6 7 8 |
{ "NCacheSettings": { "CacheName": "demoClusteredCache", "EnableLogs": "true", "SessionAppId": "demoApp" }, // Other settings here... } |
Para más detalles sobre la configuración NCache tiene para su proveedor de sesión, marque ASP.NET Core Configuración del proveedor de sesión.
Una vez que nos registramos NCache services, necesitamos configurar la tubería de solicitud HTTP. Necesitamos agregar el UseNCacheSession()
método. Observemos el orden de nuestro middleware en la canalización de solicitudes. Deberíamos agregar el NCache el middleware de sesión antes que cualquier otro middleware que lea datos de sesión.
Además, después de agregar NCache servicios y middleware, accedemos a nuestros datos de sesión utilizando el Http.Session
class dentro de las páginas de Razor y los controladores MVC.
2. NCache Implementación de IDistributedCache para sesiones
En lugar de usar el AddNCacheSession()
y UseNCacheSession()
métodos para registrarse NCache como proveedor de sesión, podemos usar ASP.NET Core sesiones con NCache Implementación de IDistributedCache.
Por defecto, ASP.NET Core tiene la AddDistributedMemoryCache()
método para registrar una implementación en memoria del IDistributedCache
.
En lugar de usar esa implementación, agreguemos el NCache implementación usando el AddNCacheDistributedCache()
método.
Esta vez, instalamos el NCache.Microsoft.Extensions.Caching
Paquete NuGet y use el Alachisoft.NCache.Caching.Distributed
espacio de nombres Cambiemos nuestra aplicación web de muestra anterior para usar NCache IDistributedCache
implementación,
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(); |
Aviso, en lugar de registrar el NCache servicios y middleware para almacenamiento en caché de estado de sesión, usamos ASP.NET Core AddSession()
y UseSession()
métodos. Pero, especificamos una implementación de caché distribuida diferente. el de NCache.
Para utilizar el AddNCacheDistributedCache()
método, necesitamos pasar el nombre del caché como un parámetro requerido. Nuevamente, podemos usar el appsetttings.json
archivo en su lugar. Opcionalmente, podemos habilitar registros y excepciones y cambiar el tiempo de espera de la solicitud y los intentos de reintento. Para todas las opciones de configuración disponibles para IDistributedCache
implementación, comprobar Configurar ASP.NET Core IDistributedCacheIDistributedCache.
Después de estos pasos, podemos acceder a los datos de nuestra sesión usando el Http.Session
.
Conclusión
Así es como podemos escalar nuestro ASP.NET Core aplicaciones que utilizan Caché de estado de sesión con NCache. En consecuencia, con solo unos pocos cambios de código y configuraciones en nuestras aplicaciones.
NCache tiene más características para la gestión del estado. Por ejemplo, NCache funciona como un ASP de múltiples regiones.NET Core Proveedor de sesión. Además, en caso de recuperación ante desastres o redireccionamiento del tráfico, podemos replicar los datos de nuestra sesión para evitar perderlos.
Además, para aquellas aplicaciones con bases de código heredadas que todavía usan ASP.NET Framework junto a la nueva ASP.NET Core, Podemos configurar NCache para compartir sesiones entre los dos marcos.
Por lo tanto, eche un vistazo más de cerca a NCache para el almacenamiento en caché de sesión marcando NCache repositorio oficial de GitHub para una aplicación de muestra que utiliza el almacenamiento en caché de sesión para crear un juego de adivinanzas.