Pregunta

Aquí está mi pregunta actual:

Supongo que mi problema (que se describe a continuación) se debe a que los procesos de trabajo de ASP.NET se reciclan, según las respuestas a continuación: estoy usando el almacenamiento de sesiones de InProc y no veo muchas posibilidades de alejarme debido a la restricción. para otros tipos de almacenamiento, todos los objetos de la sesión deben ser serializables.Sin embargo, no puedo entender qué haría que el proceso de trabajo se recicle con tanta frecuencia como lo veo: hasta donde yo sé, no hubo ningún cambio en los archivos en el directorio de la aplicación, y las opciones en IIS parecen implicar que el proceso solo se reciclaría cada 1740 minutos, lo cual es mucho menos frecuente que la pérdida de sesión real.Entonces, mi pregunta ahora es: ¿qué diferentes casos pueden provocar que se recicle un proceso de trabajo de ASP.NET?

Aquí está mi pregunta original:

Tengo un problema difícil de reproducir que ocurre en mi aplicación web ASP.NET.La aplicación tiene una página principal .aspx que se carga e inicializa varias variables de sesión.Esta página utiliza ASP.NET Ajax. Sys.Net.WebRequest clase para acceder repetidamente a otra página .aspx, que utiliza las variables de sesión para realizar consultas a la base de datos y actualizar la página principal (la página principal nunca se vuelve a solicitar).

Ocasionalmente, después de un período de uso de la página, lo que provoca solicitudes HTTP exitosas en las que la sesión creada en la página principal se transfiere correctamente a la página secundaria, una de las solicitudes parece provocar que se cree una nueva sesión ASP.NET: toda la sesión. las variables se pierden (lo que provoca que se genere una excepción en mi código) y se informa una nueva identificación de sesión en la página solicitada dinámicamente.Eso significa que, de repente, la página principal se desconecta del servidor; en lo que respecta al servidor, el usuario ya no inicia sesión.

Estoy casi seguro de que no es un tiempo de espera de sesión: el tiempo de espera está establecido en algo ridículo, la cantidad de tiempo que lleva lograr que esto suceda es variable pero nunca es lo suficientemente larga como para causar que la sesión se agote. y el constante Sys.Net.WebRequests debería actualizar el cronómetro de la sesión.

Entonces, ¿qué más podría estar sucediendo que provocaría que las solicitudes HTTP pierdan contacto con la sesión ASP.NET?Desafortunadamente, no he estado rastreando el tráfico de la red cuando esto me sucedió, o habría verificado si la cookie de sesión ASP.NET se mantuvo o no.

¿Fue útil?

Solución

Una solución sería utilizar un StateServer, en lugar de la gestión de sesiones InProc.

Muchas cosas pueden hacer que se pierda el estado de la sesión:

  1. Editando Web.Config
  2. Restablecimiento de IIS
  3. etc.

Si el estado de la sesión es importante para su aplicación, utilice la administración del estado de SQL o el servidor de estado que se envía con ASP.NETO.

Salud,

RB.

Otros consejos

Tuvimos problemas de sesión cuando migramos la aplicación Ankerex al nuevo servidor.El nuevo servidor tenía Microsoft Windows Server 2008 como Sistema de Operación y Microsoft Internet Information Services 7.También en el servidor se instalaron .NET Framework de las versiones 1.0.3705, 1.1.4322, 2.0.50727, 3.0 y 3.5.Para resolver este problema, he hecho habilitar el monitoreo de la salud para los eventos relacionados con la vida de la aplicación en ASP.NET 2.0.Había agregado a web.config:

...
...
<system.web>
...
...
    <healthMonitoring>
      <rules>
        <add name="Application Events"
            eventName="Application Lifetime Events"
            provider="EventLogProvider"
            profile="Default"
            minInterval="00:01:00" />
      </rules>
    </healthMonitoring>
...
...

Nos ayuda comprobar los reciclajes de AppDomain.Podemos verlo en nuestro Visor de Eventos.El enlace para más detalles es http://blogs.msdn.com/rahulso/archive/2006/04/13/575715.aspx

Después de haber agregado a Web.Config, el visor de eventos me mostró que mi aplicación se reinicia cada vez que hago clic en casi cualquier enlace en mi aplicación.Del artículo de http://blogs.msdn.com/toddca/archive/2005/12/01/499144.aspx Descubrí que ASP.NET tiene el nuevo comportamiento: si hacemos la eliminación, por ejemplo, un subdirectorio del directorio raíz de la aplicación, entonces ASP.NET 2.0 hará el reinicio de AppDomain.

El problema estaba en que tenía en web.config la instrucción:

...
<compilation debug="true" tempDirectory="c:\AnkerEx\Temporary ASP.NET files">
...

Es decir.ASP.NET compiló páginas aspx en la carpeta raíz de mi aplicación.Creo que creó carpetas, tal vez y también eliminó algunas de ellas.Eliminé la instrucción TempDirectory y la aplicación comenzó a funcionar estable.

El proceso de trabajo probablemente sea cíclico.http://www.lattimore.id.au/2006/06/03/iis-dropping-sessions/

Podría deberse a una excepción no controlada en un hilo en segundo plano.Puede hacer que finalice el proceso de trabajo de ASP.NET.Se inicia un nuevo proceso muy rápidamente, por lo que en realidad no lo notas, pero todas tus sesiones se pierden.

Aquí hay un artículo que lo explica mucho mejor que yo: Problemas de excepciones no controladas de ASP.NET 2.0

cita:

Una excepción no controlada en una aplicación ASP.NET 2.0 en ejecución generalmente finalizará el proceso W3WP.exe y lo dejará con una entrada de EventLog muy críptica similar a esta:

"EventType clr20r3, P1 w3wp.exe, P2 6.0.3790.1830, P3 42435be1, P4 app_web_ncsnb2-n, P5 0.0.0.0, P6 440a4082, P7 5, P8 1, P9 system.nullreferenceexception, P10 NIL".

Aquí hay un artículo de Microsoft KB que explica el mismo problema: KB911816 Las excepciones no controladas hacen que las aplicaciones basadas en ASP.NET se cierren inesperadamente en .NET Framework 2.0

Supongo que sería el consumo de memoria, pero configure IIS para registrar reciclajes y lo sabrás con seguridad.

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