none
Lose Session in ASP.NET (Perdida de session en ASP.NET) RRS feed

  • Pregunta

  • A quien me pueda dar una mano...

     

    Hace unas semanas migre una aplicacion web desde el frame 1 de .NET al 2.0 con el VS2005

    La aplicacion, cuando la testee, anduvo sin problemas

    Al pasarla al ambiente de produccion, existe un servidor determinado para ello que cuenta con:

     

    WS2003, una Base de datos SQLServer 2000, IIS 6.0 y cuenta con el FW 2.0

     

    Comenzo a enviar problemas de perdida de datos de la session del usuario

     

    Cuando la tenia en la version anterior no existia problema alguno...

     

    les cuento un poco lo que he revisado.... ( en realidad no me queda nada por revisar, salvo formatear el servidor...!! je... es broma)

     

    Todas las soluciones que existen en la web las aplique y no  han dado resultado alguno... hemos revisado todo lo referente a memoria, espacio en disco, cantidad de usuarios, concurrencia... seteos del iis, etc... todo lo que esta puesto y configurado esta bien y revisado hasta el cansansio

    Pero nos sigue pasando que objetos y variables que levantamos en Session en determinado momento se pierden... nos manda este error: "Object reference not set to an instance of an object"

     

    Que podra ser? Necesito realmente ayuda

     

    Muchas gracias!

    lunes, 18 de febrero de 2008 16:34

Todas las respuestas

  • Hola  Fabian
     - Se pierden todas la variables o solo algunas?
     - Siempre pasa lo mismo en el mismo lugar? (la misma pagina)
    Porque se pueden "perder":
          - Las variables de sesión (modo inProc) se pierden intermitentemente.
          - Se pierden las variables de estado de aplicación.
          - Se pierden los datos de caché.
          - Parece que el evento Application Start y el evento Application End se inician inesperadamente

    Con lo que respecta al primer punto, cuando las vbles de session se almacenan en modo INPROC (que es la configuracion por defecto) se guardan en el mismo proceso que esta corriendo tu applicacion web, y si falta memoria en el servidor todo lo que esta inProc se puede eliminar para dejar un poco de "lugar"...
    Te recomendaria que coloques tus sessiones pro ejemplo en un servidor de session o incluso dentro de un sqlserver, para que no tengas problemas cuando estes modificando archivos (pero hay que evaluar la performance)
    Pero para empezar podrias guarda en el mismo servidor o sea deberas configurar esa maquina com oservidor en modo StateServer el sessionState (tambien esta en los enlaces mas abajo)
     
    Si puede ser que las variables de session las pierdas... porque si falta memoria en el servidor todo lo que esta inProc se puede eliminar para dejar un poco de "lugar"... basicamente estan en el mismo PROCESO y este proceso tiene la particularidad que se RECICLA.
    Te recomendaria que coloques tus sesiones por ejemplo en un servidor de session o incluso dentro de un sqlserver, para que no tenga problemas cuando estes modificando archivos, o para que no se pierdan las variables

    Para probar coloca en el modo StateServer en el mismo servidor y alli no se "perderan" de repente sino cuando deben... mas abajo coloco unos enlaces de este procedimiento
    Aqui tambien unas cosillas mas de un post anterior de la misma tematica.

    Bueno la session donde la guardas???
    --------------------------------------------------------------
    ASP.NET admite tres modos de estado de sesión: (vaa 4 con Custom)
         - InProc
         - StateServer:
         - SqlServer:
         - Custom

    Aqui estan:
         - InProc: el modo en proceso almacena valores en la memoria del proceso de trabajo de ASP.NET. Este modo ofrece el acceso más rápido a estos valores. Sin embargo, cuando el proceso de trabajo de ASP.NET se recicla se pierden los datos de estado.
         - StateServer: Como alternativa, el modo StateServer utiliza un servicio independiente de Microsoft Windows para almacenar variables de sesión. Como este servicio es independiente de Microsoft Internet Information Server (IIS), puede ejecutarse en un servidor diferente. Puede utilizar este modo en una solución de equilibrio de carga, ya que varios servidores Web pueden compartir variables de sesión. Aunque las variables de sesión no se pierden si reinicia IIS, el rendimiento se ve afectado cuando atraviesa los límites de proceso.
       - SqlServer: si le preocupa la persistencia de la información de sesión, puede utilizar el modo SqlServer para utilizar Microsoft SQL Server y asegurar así el máximo nivel de confiabilidad. El modo SqlServer es similar al modo fuera de proceso, excepto en que los datos de sesión se mantienen en SQL Server. El modo SqlServer también le permite utilizar un almacén de estados ubicado fuera del proceso de IIS y que puede residir en el equipo local o en un servidor remoto.
        - Existe un modo Custom, donde debes indicarle donde se guardaran las sessiones (nunca lo probe por eso no te puedo comentar muy bien) Donde se configura: en el web.config (como toda configuracion) je!

       
    Y cuando se reinicia?
    ---------------------------------------
    Dice que se reinicia cuando:
     - si se recicla el AppDomain,
     - o el proceso Aspnet wp.exe (o el proceso W3wp.exe)


    Cuando?
         -    Varios atributos (por ejemplo el atributo memoryLimit) tienen configuraciones particulares en la sección  <processModel> del archivo de configuración. (aqui vale la pena aclarar que este cambio no surge efecto directamente como lo demas atributos del webconfig sino cuando se reinicia el proceso de trabajo)
    Se lo puede cambiar tambien desde interfaz grafico desde el grupo de aplicacciones desde la consola del IIS. pero creo que esto es para todas las webs del grupo de app pero no se cual tiene mas prioridad creo yo que el webconfig como todo.
    memoryLimit: Especifica, como porcentaje de la memoria total del sistema, el espacio de memoria máximo que el proceso de trabajo puede consumir antes de que ASP.NET inicie un nuevo proceso y reasigne las solicitudes pendientes. El valor predeterminado es 60.

         -   Se modificaron el Global.asax o el archivo Web.config.
         -   Se modificó el directorio Bin de la aplicación Web.
         -   La detección de virus de software tocó alguna información adicional en archivos de configuracion .config.

    El modo de sesión InProc indica que se almacena estado de la sesión localmente.
    Esto significa que con sesión InProc, se almacena realmente el modo de estado en objetos de vida en el AppDomain de la aplicación Web. Se debe esto a cuando se pierde al estado de sesión Aspnet wp.exe (o W3wp.exe para aplicaciones que se ejecutan en Servicios de Internet Information Server [IIS 6,0]) o se reinicia el AppDomain.

    Todo eso esta en este KB
    http://support.microsoft.com/?scid=kb;es;324772

    INFO: Introducción a la administración de estados de ASP.NET
    http://support.microsoft.com/kb/307598/es

    Configuración de la agrupación de aplicaciones de reciclaje
    --------------------------------------------------------------------------------------------
    Reciclar la configuración del grupo de aplicaciones:
    La configuración de la agrupación de aplicaciones de reciclaje permiten controlar el modo de recuperación de los recursos del sistema
    http://msdn2.microsoft.com/es-es/library/1dtw20e3.aspx

    Process Model - Propiedades
    http://msdn2.microsoft.com/es-es/library/yk0c93w4.aspx

    ProcessModelSection (Clase)
    La clase ProcessModelSection controla los distintos aspectos del proceso de trabajo de ASP.NET, incluidos el período de duración, el número de instancias creadas a la vez, bajo qué identidad de seguridad se ejecuta y el tamaño del grupo de subprocesos de CLR que se ocupa de las solicitudes.
    http://msdn2.microsoft.com/es-es/library/system.web.configuration.processmodelsection(VS.80).aspx





    Enlaces:
    -------------------
    Modos de estado de sesión
    http://msdn2.microsoft.com/es-es/library/ms178586.aspx

    Elemento sessionState (Esquema de configuración de ASP.NET)
    http://msdn2.microsoft.com/es-es/library/h6bb9cz9.aspx

    ¿Por qué se reinicia mi aplicación ASP.NET?
    http://support.microsoft.com/?scid=kb;es;871042

    PRB: Datos de sesión se pierden cuando utiliza modo InProc de ASP.NET de estado de sesión
    http://support.microsoft.com/kb/324772/es

    PRB: Las variables de sesión se pierden intermitentemente en aplicaciones ASP.NET
    http://support.microsoft.com/kb/316148/es

    CÓMO PARA: Configura SQL Server a Store ASP.NET Session State
    http://support.microsoft.com/kb/317604/



    Espero que te sirva de ayuda o guia

    lunes, 18 de febrero de 2008 19:11
  •  

    Jose,

     

    muchas gracias por contestar...

    te cuento... vamos a probar con la session en stateserver a ver que pasa...

     

    lo que no entendi bien es porque se pierden Intermitentemente las variables de session o fue una pregunta que me hiciste?

     

    saludos

     

     

    lunes, 18 de febrero de 2008 19:58
  • Hola Fabian...
    y? Como te fue con este tema?
    martes, 26 de febrero de 2008 5:01
  • Jose,

     

    como estas?

     

    Sabes que probe, pero no  hubo caso... hay algo en el servidor que hace perder sesiones.

    Modifique el antivirus y todo lo demas, ahora tengo menos perdidas

    Estoy cambiando de servidor

     

    saludos y muchas gracias por la ayuda

     

     

    martes, 26 de febrero de 2008 11:12
  • Yo estoy teniendo el mismo problema ahora. Cambié también a stateserver, quité antivirus, etc etc, y se siguen perdiendo de forma intermitente. ¿Al final pudiste resolverlo?
    martes, 5 de abril de 2011 17:21
  • Se que este Post es muy antiguo, pero tengo el mismo problema, se me desconectan las máquinas constatemene y según veo en los errores y he podido darme cuenta es q se pierden las sesiones, la aplicación la hemos cambiado de servidor como 3 veces y sigue pasando lo mismo, alguien sabe como solucionar este tema.

    Gracias!!! Espero alguien lo hay apodido solucionar para q me ayude.

    viernes, 17 de febrero de 2012 18:36