¿Que más necesito para poder almacenar la sesión en un cache de redis? – redisc# asp.net-mvc-5 asp.net-mvc

Pregunta:


Ya instale la librería de RedisSessionStateProvider y su dependencia StackExchange.Redis.StrongName, también coloque la configuración en el web.config

<sessionState mode="Custom" customProvider="RedisSessionProvider" cookieless="true" >
   <providers>
      <add name="RedisSessionProvider" type="Microsoft.Web.Redis.RedisSessionStateProvider" port="6380" host="XXX.redis.cache.windows.net" accessKey="OQm………15E=" ssl="true" connectionTimeoutInMilliseconds="5000" operationTimeoutInMilliseconds="1000" retryTimeoutInMilliseconds="3000" writeExceptionsToEventLog="true" />

 </providers>
</sessionState>

Pero no logró que se almacene la sesión en , pero si realizo la conexión en código la conexión es exitosa, aquí está mi código:

/// se crea la conexión
private static Lazy<ConnectionMultiplexer> lazyConnection = new Lazy<ConnectionMultiplexer>(() =>
{
    var redisOption = new ConfigurationOptions();
    return ConnectionMultiplexer.Connect("XXX.redis.cache.windows.net:6380,abortConnect=false,ssl=true,password=OQmAPmp0 . . . . TJE15E=");
});


///regresa el objeto de la conexion

public static ConnectionMultiplexer Connection
{
    get
    {
        return lazyConnection.Value;
    }
} 

///creo la session y agrego elementos manualmente al redis       
public ActionResult SessionStart()
{
    IDatabase cache = Connection.GetDatabase();
    Session["loginTime"] = DateTime.Now.ToString();
    string strValue = "myvalue";
    Session.Add("myvalue ", strValue);
    return View();
}

Por ejemplo lo que agrego manualmente se almacena exitosamente pero sí creo una sesión no se almacena en automático, creo necesito algo mas pero no que es.

Preguntado por: Luis Raúl Espinoza Barboza

JuanK

Acabo de hacerlo desde mi propio proyecto sin problemas, utiliza este código para probarlo en tu ambiente. Te recomiendo que lo pruebes en un proyecto en limpio, puede que tengas algo mal en tu web.config que no esté permitiendo cargar el provider y no lo hayas notado

web.config

<sessionState mode="Custom" customProvider="MySessionStateStore" >
  <providers>
    <add name="MySessionStateStore"
         type="Microsoft.Web.Redis.RedisSessionStateProvider"
         host="abcde1234.redis.cache.windows.net"
         accessKey="FuDmzfO3B/6M1cX1ls="
         ssl="true" throwOnError="true" port="6380" writeExceptionsToEventLog="true"
         databaseId = "1"
         />
  </providers>
</sessionState>

y tan solo con esto en mi home controller (o el que quieras)

HomeController/Index

Session["test-" + Guid.NewGuid().ToString()] = DateTime.Now.ToLongDateString();

Para verificar los valores uso Redis Desktop Manager

introducir la descripción de la imagen aquí

Recomendaria seguir guias como esta

How to Use Azure Redis Cache

para implementar redis integrado en tu aplciacion que publiques en azure. Despues de seguir esa guia si continuas con problemas se podria analizar, pero partimos de una base que has implementado.

Analizando un poco mas en profundidad puedo ver una implementacion que configura el session state usando redis

ASP.NET Session State Provider for Azure Redis Cache

La verdad siempre habia visto a redis usandose como objetos del propio cache o en union a un orm como ser entity framework, pero veo que tambien puede reemplazar los objetos de asp.net

saludos

Fuente

Add a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *