Tengo problemas para obtener 2 aplicaciones idénticas de ASP.NET MVC para compartir la misma sesión utilizando un Session StateServer. La razón por la que trato de hacer esto es que finalmente implementaremos esta aplicación en 3 servidores web que necesitan compartir el mismo estado. Necesitamos usar StateServer porque estamos tratando de minimizar el uso de la base de datos para el almacenamiento no relacionado con los datos.¿Por qué no puedo compartir el estado de sesión entre 2 aplicaciones web con StateServer? ¿Qué me estoy perdiendo?
El programa de instalación:
He desplegado el mismo código base a http://localhost/App1 y http://localhost/App2
ambos tienen archivos Web.Config idénticos con lo siguiente:
<system.web>
<sessionState mode="StateServer"
cookieless="false"
timeout="20"
stateConnectionString="tcpip=127.0.0.1:42424" />
//stateConnectionString="tcpip=192.168.1.52:42424" /> // also doesn't work
<machineKey
validationKey="8B9F68D0CC730F6F046D0173021C34B1A0D9A01C21D8E4D4A7A1DFF38332DEE8CBBAFEA503C18776614EE9D4F7EEA7E5D2D5571630547D822485A27B1EF53AC1"
decryptionKey="60009563EFCFC594FD1BC46684943AA398EE70412A624B2EB488BBB071F15ECF"
validation="SHA1" decryption="AES" />
He usado this tool to generate these machine keys
La prueba:
puse lo siguiente en uno de mis controladores para probar si funcionaba:
ViewData["mode"] = requestContext.HttpContext.Session.Mode.ToString();
string timestamp = DateTime.Now.ToString();
if (requestContext.HttpContext.Session["timestamp"] == null)
{
requestContext.HttpContext.Session["timestamp"] = timestamp;
}
ViewData["timestamp"] = requestContext.HttpContext.Session["timestamp"].ToString();
ViewData["realtime"] = timestamp;
con esto en la vista:
<p>
Mode: <%= ViewData["mode"].ToString() %>
</p>
<p>
Time: <%= ViewData["timestamp"].ToString() %>
</p>
<p>
real time: <%= ViewData["realtime"].ToString() %>
</p>
El resultado:
Para ambas implementaciones, cuando la página se carga por primera vez, veo que el modo es StateServer y la marca de tiempo se establece en el mismo tiempo que el valor en tiempo real. Sin embargo, si esto funcionaba, solo la primera página debería tener el mismo tiempo. como el valor en tiempo real. La carga de la segunda página debe leer del StateServer porque el valor de la marca de tiempo ya no es nulo y muestra ese valor de tiempo. Pero, en cambio, muestra el valor en tiempo real de nuevo.
Cuando actualizo la página, la marca de tiempo permanece igual y el valor en tiempo real siempre se actualiza. Esto indica que la marca de tiempo se está guardando en la sesión, pero el valor del sello de tiempo siempre es diferente para ambas implementaciones cuando debería ser el mismo, por lo que esto indica que la sesión no se está compartiendo.
¿Alguien puede señalar si estoy haciendo algo mal o si hay algo más que tengo que hacer para que esto funcione? Gracias
¿Pudo completar esto ? –
@DaveDev Sé que llego tarde a la fiesta: P, pero esto podría ayudar a otros. si pudieras encontrar lejos para compartir el mismo dominio para la cookie de sesión (ver https://msdn.microsoft.com/en-IN/library/ms228262(v=vs.85).aspx) y almacenar la sesión en el servicio común (DB/Redis) entonces usted puede compartir la sesión entre el servidor múltiple –