2009-08-06 22 views
5

Sobre el tema de almacenar imágenes temporales y manejar su limpieza en el sistema de archivos de un servidor web: (usando C# en .NET 3.5).Cómo usar y alcance de global.asax (para la limpieza de archivos después de finalizar la aplicación)

Se sugirió que use un archivo global.asax para manejar esto.

No puedo entender cómo funciona esto.

Tengo dos aplicaciones separadas ...

he dado cuenta de que el global.asax se supone que debe estar en el directorio raíz del sitio web.

Preguntas:

1) ¿Cómo puedo obtener el global.asax al fuego para sólo estas dos aplicaciones específicas.

2) ambas aplicaciones necesitan crear una lista de cadenas (las ubicaciones de los archivos) y luego eliminarlas en la terminación de la aplicación. ¿Instalo esta matriz en la aplicación o en el global.asax?

Mi código se verá así:

List<string> fileLocations = new List<string>(); 
//I don't know where to put this. 

//The next line of code will be in both applications (this could 
//be called many times in one application session. The names of 
//the files are generated from the clock (milliseconds and 
//seconds combined, I might change this to use the actual 
//random class combined with sessionID) 
fileLocations.Add(file); 

void Application_End(object sender, EventArgs e) 
{ 
    // Code that runs on application shutdown 
    foreach(string file in fileLocations) 
    { 
     if(File.Exists(file)) 
      File.Delete(file); 
    }  
} 

Estoy confundido acerca de cómo el Global.asax funciona realmente. ¿Se usa como una interfaz?

Respuesta

3

Un buen lugar para ver cómo usar Global.asax es leer el ASP.NET Quickstart on it's usage. Usted tiene uno por aplicación/sitio web. Es como eventos de nivel global.

Tenga en cuenta que el evento Application_End no se activará con frecuencia en la mayoría de los servidores. Solo se activará si el grupo de aplicaciones IIS está descargado/reciclado, web.config modificado, los ensamblados cambiados en/Bin, o alguna otra situación donde el servidor web se detiene. En un sitio popular pueden pasar semanas, meses antes de que su evento se desate.

+0

Entonces, ¿no hay una manera simple de detectar cuando alguien termina de usar una aplicación y ejecutar un script de limpieza? Siento que esto debería ser mucho más fácil de lo que es:/ – Dave

+0

Bueno, si el usuario está conectado, podría usar el evento Session_End también en Global.asax Por defecto son 20 minutos, pero puede establecer su propio límite. Ver http://stackoverflow.com/questions/621744/how-to-handle-session-end-in-global-asax y http://justgeeks.blogspot.com/2008/07/aspnet-session-timeouts.html –

+0

Ah, vale. Entonces, si declaro una Lista en el archivo global.asax, creará una nueva lista para cada sesión de usuario, o declaro la lista en mi programa y de alguna manera el archivo.asax global tiene acceso a ella. Como dije, me disculpo por las preguntas básicas ... Por lo general, soy bastante bueno para descifrar estas cosas por mi cuenta, pero por alguna razón, el archivo.asax no es muy intuitivo para mí. – Dave

2

MSDN Link y Wikipedia Link son lugares para comenzar.

No se utiliza como una interfaz, más como un filtro que tiene varios ganchos para cosas como iniciar el objeto Aplicación o una Sesión o una Solicitud. El enlace de Wikipedia tiene una lista de llamadas que Global.asax puede hacer, aunque sugiero dar un paso atrás para comprender cómo termina una aplicación web en comparación con una aplicación de escritorio. IIS puede reciclar una AppPool como una forma de finalizar la aplicación, aunque hay otras, así que establecer una limpieza al final de la aplicación puede no ser la mejor idea si ese evento nunca se dispara.

+0

Leo ambos, pero estos me llevan a una mayor confusión. Me parece que esto sugiere que global.asax solo utiliza variables de tienda a las que se puede acceder desde CUALQUIER sesión o CUALQUIER aplicación. Lo cual es útil, pero no por lo que estoy haciendo en este momento. Tenía la impresión de que global.asax podría crear hilos para manejar un inicio de aplicación individual y un final de aplicación individual. – Dave

+0

Creo que puede tener un malentendido sobre el uso de los objetos Session y Application en ASP.Net. Existe una sesión para cada usuario conectado, de modo que si el usuario A tiene una variable almacenada en el objeto Session, no es accesible para nadie más que para el usuario A. Por el contrario, el objeto Application es verdaderamente global, ya que solo hay uno cuando el servidor se está ejecutando, por lo tanto debe tener cuidado al usarlo como si desea almacenar la información del usuario A en el objeto Aplicación, debe usar alguna forma de marcar la clave para que sea exclusiva de ese usuario. Podrías crear un hilo en cualquier parte de ASP.Net –

Cuestiones relacionadas