ASP de múltiples regiones.NET Core Proveedor de sesión para NCache
NCache proporciona soporte para compartir sesiones en múltiples regiones. Esto evita que los usuarios pierdan sus sesiones en caso de que necesite redirigir su tráfico a otra ubicación debido al tráfico o debido a la recuperación ante desastres. Las sesiones se replican a través de WAN sin problemas sin replicar la sesión completa, lo que puede generar un gasto de ancho de banda.
Figura 1: Uso compartido de sesiones entre centros de datos
Para compartir sesiones entre regiones, debe habilitar la afinidad de ubicación. Esto se habilita estableciendo el indicador EnableLocationAffinity en verdadero y proporcionando los nombres y prefijos de la caché para identificar el origen (ubicación) de la caché para la solicitud. Puede proporcionar varios nombres de caché que formen la granja web; sin embargo, el caché especificado en CacheName se considera el caché principal de forma predeterminada.
Requisitos previos
- Instale los siguientes paquetes de NuGet en su aplicación en función de su NCache Versión:
- Empresa: AspNetCore.Sesión.NCache
- Profesionales: AspNetCore.Sesión.NCache.Profesional
- Fuente abierta: AspNetCore.Sesión.NCache.Fuente abierta
- Para utilizar la extensión, incluya los siguientes espacios de nombres en su aplicación en Inicio.cs:
- El caché debe estar ejecutándose.
- Para obtener detalles de la API, consulte: AñadaNCacheSesión, UsoNCacheSesión.
- Asegúrese de que los datos que se agregan sean serializable.
- Para garantizar que la operación sea a prueba de fallas, se recomienda manejar cualquier posible excepción dentro de su aplicación, como se explica en Manejo de fallas.
- Para manejar cualquier excepción no vista, consulte el Solucionando Problemas .
Paso 1: configurar servicios
El servicio de gestión de sesiones debe inicializarse. En Inicio.cs, utilizar el AddNCacheSession()
método de extensión en IServiceCollection
in ConfigureServices()
para inicializar el servicio. La sobrecarga muy básica de este método de extensión toma un IOptions<NCacheSessionConfiguration>
como su configuración base.
Hay dos métodos para especificar configuraciones:
- A través de su aplicación Startup.cs o
- En formato JSON en Configuración de aplicaciones.json .
Método 1: especificar configuraciones en Startup.cs
Para habilitar el uso compartido de sesiones, es necesario configurar el EnableLocationAffinity
marcar como verdadero y proporcionar la lista de cachés en AffinityMapping
. Tenga en cuenta que uno de los cachés debe coincidir con CacheName, que se considera el caché principal. También es necesario especificar un directorio compartido por ambas aplicaciones.
Note
El prefijo de la caché debe tener una longitud máxima de 4 caracteres.
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc();
services.AddDataProtection()
.PersistKeysToFileSystem(new DirectoryInfo(dir))
.SetApplicationName("SharedCookieApp");
services.AddNCacheSession(configuration =>
{
configuration.CacheName = "LondonCache"; //compulsory
configuration.EnableLogs = true;
configuration.SessionOptions.IdleTimeout = 5;
configuration.EnableLocationAffinity = true;
configuration.AffinityMapping = new CacheAffinity[]
{
new CacheAffinity { CacheName = "LondonCache", CachePrefix = "LDNC"},
new CacheAffinity { CacheName = "NewYorkCache", CachePrefix = "NYKC"},
new CacheAffinity { CacheName = "TokyoCache", CachePrefix = "TKYC"},
};
});
}
Método 2: especificar configuraciones en Appsettings.json
El servicio de gestión de sesiones debe inicializarse. En Inicio.cs, utilizar el AddNCacheSession()
método de extensión en IServiceCollection
in ConfigureServices()
para inicializar el servicio. La sobrecarga muy básica de este método de extensión toma un IOptions<NCacheSessionConfiguration>
como su configuración base.
Note
El prefijo de la caché debe tener una longitud máxima de 4 caracteres.
"NCacheSettings": {
"EnableLocationAffinity": true,
"EnableLogs": true,
"RequestTimeout": 5,
"CacheName": "LondonCache",
"AffinityMapping": [
{
"CacheName": "LondonCache",
"CachePrefix": "LDNC"
},
{
"CacheName": "NewYorkCache",
"CachePrefix": "NYKC"
},
{
"CacheName": "TokyoCache",
"CachePrefix": "TKYC"
}
]
}
public void ConfigureServices(IServiceCollection services)
{
//Add framework services
services.AddMvc();
//Add services to the container
services.AddNCacheSession(Configuration.GetSection("NCacheSettings"));
}
Paso 2: agregar middleware a la aplicación
Una vez que se hayan inicializado los servicios, puede configurar la canalización de solicitudes HTTP agregando middleware en el Configure()
método. El siguiente es un extracto que muestra la adición de una capa de middleware mediante el uso de UseNCacheSession()
método de extensión en IApplicationBuilder
. NCache el middleware de sesión siempre debe apilarse antes de la capa que utiliza las sesiones.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
if (env.IsDevelopment()){
app.UseDeveloperExceptionPage();
app.UseBrowserLink();
}
else{
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseNCacheSession(); //store NCache session data
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=myApp}/{action=Index}/{id?}");
});
}
Ahora puede proceder a utilizan el NCache como caché subyacente para su ASP.NET Core sesiones
Recursos adicionales
NCache proporciona una aplicación de ejemplo para el almacenamiento en caché de sesiones en GitHub.
- Enviado con NCache: %NCHOME%\samples\dotnetcore\SessionCaching
Vea también
.NETO: Alachisoft.NCache.Web.SessionState espacio de nombres