Pregunta

Tengo un sitio ASP clásico, que requiere algunas tablas de base de datos para ser vaciado de datos de la sesión en un horario. Este sistema no tiene acceso a las tareas programadas (está en un sitio de acogida compartida, y se utiliza el servidor MySQL)

Yo estaba considerando el uso de global.asa, de disparar eventos como por ejemplo:

  1. Application_OnStart - borrar todos los datos de sesión de base de datos
  2. Application_OnEnd - Eliminar todos los datos de la sesión
  3. Session_OnStart - crear una sesión de usuario'
  4. Session_OnEnd -. Borrar todos los datos de la sesión que se relaciona con esta sesión

¿Hay alguna razón por la que no debería crear conexiones de base de datos en global.asa? Estos se crean y se destruyen aquí, no compartida en la sesión o el alcance de la aplicación. Lo veo como una manera de ejecutar estas tareas de administración dos veces al Cliente (en la sesión de inicio y fin) y no ser despedido de nuevo para ellos equivale a muy poco tráfico de base de datos.

Alguien tiene alguna idea de por qué esto puede ser malo? Ninguna razón para que no se conectan a una base de datos en global.asa?

Si alguien piensa que la idea anterior es malo - ¿tiene algún otro pensamiento en cuanto a cómo puede regular vacío estas tablas sin uno o más de:

  1. La tarea programada
  2. tarea programada de base de datos
  3. Ejecutar el código al cargar la página para cada página (de ahí los ganchos Session_OnStart)

Ta '

Superior de coco

¿Fue útil?

Solución

Me gustaría hacer la limpieza de sesión única en Session_OnEnd y para todas las sesiones en Application_OnStart. Si el dispositivo Todo sesiones de limpieza es lenta, se puede hacer una cosa fea y poner que la limpieza en un asp-archivo separado que haga una petición http al uso de la clase Xmlhttp, recuerde que no espere la solicitud para completar, ya que no comenzará antes de ser servido se ejecuta todo el código en Application_OnStart.

Otros consejos

Se puede escribir una página web que vacía las tablas de sesión, y llamar a esa página de una caja externa a través de una tarea programada.

Depende de cuánto tiempo se llevará a sus tareas de limpieza. Dado que no hay petición será servido mientras Application_Start está ejecutando, se puede bloquear por un tiempo.

Por otra parte, usted no tiene ninguna garantía de que Application_End (o Session_End) serán llamados en todos los casos (cuando el servidor está apagado no puede ser despedido, o alguna falla catastrófica puede pasar por alto estos hechos en su totalidad).

La mejor manera sería, como usted sugiere, para ejecutar una tarea programada a cargo de la limpieza de los datos de sesión obsoletos.

Si usted tiene un tráfico constante puede cuestas pequeñas tareas al final de un ciclo de petición. Sólo emitir una Response.Flush y luego ejecutar las consultas db. Por supuesto que necesita para escribir youre propio programador. Otra opción es crear un archivo ASP independiente (tasklet), que hace ping utilizando un serverside, asíncrono, xmlhttpreq al inicio de la solicitud. Esto mantiene el código de limpieza fuera del ciclo de petición de los clientes y reduce la latencia.

En realidad i llenar no se sorprenda si no hay ya algunos appengine inteligente basado webappr / API que puede hacer ping estás legado tasklet / WebHooks en la fecha prevista. Y si no lo hay, podría escribir uno mismo eres, las opciones son infinitas:)

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