Pregunta

Tengo un sitio web en C # / ASP.NET que está actualmente en desarrollo. Cuando estamos en la producción, me gusta hacer comunicados con frecuencia en el transcurso del día, ya que corregir los errores y añadir características (como este: http://toni.org/2010/05/19/in-praise-of-continuous-deployment-the -wordpress-com-historia / ).

Si subes una nueva versión del sitio o incluso cambiar un solo archivo, se echa de los usuarios que se registran actualmente en y los hace volver a empezar cualquier forma y tal. ¿Hay un secreto para ser capaz de hacer despliegues sin interferir con los usuarios de los sitios NET?

¿Fue útil?

Solución

Si realiza un cambio en un archivo de configuración, el contenido de una carpeta bin de la aplicación, o cosas por el estilo, se reinicia el proceso de trabajo de ASP.NET junto con su solicitud.

Este resultado en las sesiones de los usuarios eliminados y patadas de salida.

La solución es utilizar otros métodos de almacenamiento de sesión distinta de la InProc defecto.
Esto se puede conseguir mediante el establecimiento de la href="http://msdn.microsoft.com/en-us/library/ms178586%28v=VS.80%29.aspx" rel="nofollow noreferrer"> modo de estado de sesión . Las opciones SqlServer y StateServer ofrecen muy buen remedio para su problema.

Modo SqlServer es relativamente fácil de configurar y poner en marcha. (Básicamente, es sólo la creación de una base de datos, correr aspnet_regsql, y especificando que la config.) Si no tiene MS SQL Server o no desea utilizarlo, puede utilizar StateServer, o crear su propio proveedor y utilizar el modo Custom.

La única restricción es que sólo se puede almacenar valores serializables con el modo SqlServer y StateServer.

Otros consejos

La razón por la que se está viendo esto es porque está restableciendo el grupo de aplicaciones, restableciendo de este modo la sesión de todo el mundo.

La ruta sería más limpio para descargar la sesión a un servidor de estado de sesión, o reducir al mínimo el uso de sesión.

Una forma de evitar esto es que si no puede descargar su sesión es desplegar siempre a un nuevo directorio virtual. Su URL del lado público a continuación, sólo vuelve a dirigir a su versión más reciente. Todos los usuarios que ya han iniciado sesión en seguirían utilizando la versión anterior, pero los nuevos usuarios podrían utilizar la nueva versión.

En función de lo que se almacena en el objeto Session, que puede ser capaz de reconstruir en Session_Start manejador de Global.asax. Solía ??hacer esto en una aplicación interna en el que sólo se almacenan realmente la identidad del usuario en la sesión, así que pudimos utilizar su cookie de autorización para recrear la sesión.

Una cosa a tener en cuenta si se hace esto: decir que un usuario carga un formulario y luego se va para el almuerzo, y actualizar esa página mientras están fuera. Si vuelven a su escritorio y envía el formulario van a ser la presentación de la versión antigua de la forma al nuevo código subyacente.

Me usuarios supongamos que son expulsados ??debido proceso de aplicación de servidor web que se reinicie. Por las sesiones de usuario por defecto se almacenan en la memoria de datos y de sesión se mata. proveedor de sesión es opción configurable en web.config. Se puede elegir proveedor de sesión externa (fuera de aplicación web-proceso) es un paso hacia lo que se esperaba.

scroll top