Pregunta

Yo entiendo que todos los datos de sesión de InProc siempre se ha ido cuando su propietario w3wp proceso recicla, ya que sólo reside en la memoria w3wp.

Me preguntaba aunque si es posible almacenar en caché los datos de sesión cuando el reciclaje sucede en algún lugar externo al proceso, y luego reinyectar (y reconstruir) la sesión cuando se trata de una copia de seguridad. De esa manera me gustaría obtener la velocidad de InProc con la fiabilidad de externalización servidor de estado similar cuando sea necesario. ¿Es esto posible?

¿Fue útil?

Solución

No, esto no es posible. No hay una API para "calentar" en proceso de estado de sesión o caché. Tal solución no sería fiable de todos modos. No se podía Gaurantee que lo último que hizo su aplicación sería para exportar su estado actual período de sesiones, por lo que nunca podría contar con los datos importados para estar al día de todos modos.

Puede utilizar el servidor de estado fuera de proc en la misma máquina que la aplicación web. A continuación, la aplicación web puede reciclar libremente, manteniendo la información de estado intacto. Esto es un poco más rápido que el uso de SQL Server para administrar sesiones, ya que no tiene que hacer frente a la sobrecarga de SQL o de tránsito de red a otra máquina, la única manera es peor que durante el proceso de estado de sesión es que los datos tienen que mariscal través de los límites del proceso, pero siempre y cuando usted no tiene una cantidad masiva de la rápida evolución de los datos de sesión, esto no debería ser perceptible en absoluto.

También hay otras alternativas, como Microsoft Código proyecto denominado "velocidad" o SessionServer de ScaleOut Software (entre otros estoy seguro) que ofrecen almacenamiento en caché distribuido mecanismos que pueden mantener el estado de sesión o caché sincronizado entre los servidores de una granja de servidores sin tener que recurrir al uso de SQL Server.

Contrariamente a lo que otro usuario ha escrito, no me utilizar ViewState para almacenar los datos de sesión, si es posible. Por un lado, no es cierto estado de sesión, si un usuario se mueve hacia atrás o hacia adelante se puede perder. En segundo lugar, es bastante inseguro. En tercer lugar, causa hinchazón masiva si se abusa de la página.

Otros consejos

Tal vez se puede almacenar suficiente información en una cookie (o en ViewState) para que pueda volver a crear una sesión sobre la base de que los datos en el caso se recicló el proceso de trabajo.

O puede crear su propio servidor de estado (por ejemplo, un servicio de Windows) donde se almacenan parte de su sesión y acceder a este servicio desde la aplicación web a través de la interacción remota o similar.

Debe utilizar el SQL Server para el estado de sesión si esa es su intención. Lo que quiere son sesiones que pueden recuperarse de un final completo de la processs anfitrión. Ni inproc o stateserver apoyan que a medida que una vez que bajan pierden todos los datos. Se podría escribir su propio método de estado, pero eso sería laboriuous. He aquí las direcciones si usted quiere hacer lo siguiente:

http://www.exforsys.com/tutorials/asp.net-2.0/asp.net-2.0-customizing-the-session-state-mechanism.html

Lo que es posible que desee hacer es no usar sesiones en absoluto, sino que se basan más en ViewState. Si usted tiene un sitio de alto tráfico que es una buena manera de empujar la carga de trabajo de los clientes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top