Despliegue continua con una página web ASP.NET?
-
01-10-2019 - |
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?
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.
Existen dos alternativas para conseguir que:
- No utilice Sesión en absoluto. (Es posible utilizar cookies para la autenticación)
- Utilice otro modo de estado de sesión. servidor de estado o SQL Server. http://msdn.microsoft.com/en -US / library / ms178586 (v = VS.80) .aspx
De cualquier manera también se obtiene la flexibilidad necesaria para ser capaz de ejecutar su aplicación en varios servidores para un rendimiento seguro o no la agrupació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.