ASP multirregional.NET Core Provedor de sessão para NCache
NCache fornece suporte para compartilhamento de sessão em várias regiões. Isso evita que os usuários percam suas sessões caso você precise redirecionar seu tráfego para outro local devido ao tráfego ou devido à recuperação de desastres. As sessões são replicadas através da WAN perfeitamente, sem replicar a sessão inteira, o que pode resultar em despesas com largura de banda.
Figura 1: Compartilhamento de sessão entre data centers
Para compartilhar sessões entre regiões, você precisa ativar a afinidade de local. Isso é habilitado definindo o sinalizador EnableLocationAffinity como verdadeiro e fornecendo os nomes e prefixos do cache para identificar a origem (local) do cache para a solicitação. Você pode fornecer vários nomes de cache que formam o web farm; no entanto, o cache especificado em CacheName é considerado o cache primário por padrão.
Pré-requisitos
- Instale os seguintes pacotes NuGet em seu aplicativo com base em seu NCache Versão:
- Empresa: AspNetCore.Session.NCache
- Profissional: AspNetCore.Session.NCache.Profissional
- Código aberto: AspNetCore.Session.NCache.Código aberto
- Para utilizar a extensão, inclua os seguintes namespaces em seu aplicativo em Inicialização.cs:
- O cache deve estar em execução.
- Para obter detalhes da API, consulte: AdicionarNCacheNúmero da, UseNCacheNúmero da.
- Certifique-se de que os dados que estão sendo adicionados serializável.
- Para garantir que a operação seja à prova de falhas, é recomendável lidar com possíveis exceções em seu aplicativo, conforme explicado em Como lidar com falhas.
- Para lidar com quaisquer exceções não vistas, consulte o guia de solução de problemas seção.
Etapa 1: configurar serviços
O serviço de gerenciamento de sessão precisa ser inicializado. Dentro Inicialização.cs, Utilize o AddNCacheSession()
método de extensão em IServiceCollection
in ConfigureServices()
para inicializar o serviço. A sobrecarga muito básica deste método de extensão leva um IOptions<NCacheSessionConfiguration>
como sua configuração básica.
Existem dois métodos para especificar configurações:
- Através do seu aplicativo Startup.cs ou
- No formato JSON em Appsettings.json .
Método 1: especificando configurações em Startup.cs
Para ativar o compartilhamento de sessão, é necessário definir o EnableLocationAffinity
flag para true e forneça a lista de caches em AffinityMapping
. Observe que um dos caches deve corresponder ao CacheName, que é considerado o cache primário. Também é necessário especificar um diretório que seja compartilhado por ambos os aplicativos.
Note
O prefixo do cache deve ter no máximo 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: especificando configurações em Appsettings.json
O serviço de gerenciamento de sessão precisa ser inicializado. Dentro Inicialização.cs, Utilize o AddNCacheSession()
método de extensão em IServiceCollection
in ConfigureServices()
para inicializar o serviço. A sobrecarga muito básica deste método de extensão leva um IOptions<NCacheSessionConfiguration>
como sua configuração básica.
Note
O prefixo do cache deve ter no máximo 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"));
}
Etapa 2: adicionar middleware ao aplicativo
Depois que os serviços forem inicializados, você poderá configurar o pipeline de solicitação HTTP adicionando middleware no arquivo Configure()
método. A seguir está um trecho que mostra a adição de uma camada de middleware através do uso do UseNCacheSession()
método de extensão em IApplicationBuilder
. O NCache O middleware de sessão deve sempre ser empilhado antes da camada que utiliza as sessões.
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?}");
});
}
Agora você pode prosseguir para usar NCache como o cache subjacente para o seu ASP.NET Core sessões.
Recursos adicionais
NCache fornece um aplicativo de exemplo para cache de sessão em GitHub.
- Enviado com NCache: %NCHOME%\samples\dotnetcore\SessionCaching
Veja também
.INTERNET: Alachisoft.NCache.Web.SessionState espaço para nome.