2009-08-06 7 views
5

En ce qui concerne le stockage dynamique d'images temporaires et le nettoyage de leur système de fichiers sur un serveur Web: (en utilisant C# dans .NET 3.5).Comment utiliser et portée de global.asax (pour le nettoyage de fichier après la fin de l'application)

Il a été suggéré que j'utilise un fichier global.asax pour gérer cela.

Je n'arrive pas à comprendre comment cela fonctionne.

J'ai deux applications distinctes ...

J'ai compris que le global.asax est censé être dans le répertoire racine du site.

Questions:

1) Comment je reçois le global.asax à feu pour que ces deux applications spécifiques. 2) les deux applications doivent créer une liste de chaînes (les emplacements des fichiers), puis les supprimer à la fin de l'application. Est-ce que j'instancie ce tableau dans l'application, ou dans le global.asax?

Mon code ressemblera à ceci:

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); 
    }  
} 

Je suis confus au sujet de la façon dont le global.asax fonctionne réellement. Est-ce utilisé comme une interface?

Répondre

3

Un bon endroit pour regarder comment utiliser Global.asax est de lire le ASP.NET Quickstart on it's usage. Vous en avez un par application/site Web. C'est un peu comme les événements de niveau mondial. Notez que l'événement Application_End ne se déclenche pas souvent sur la plupart des serveurs. Il se déclenchera uniquement si le pool d'applications IIS est déchargé/recyclé, web.config modifié, les assemblages modifiés dans/Bin ou une autre situation où le serveur Web s'arrête. Sur un site populaire, cela peut prendre des semaines, des mois avant que votre événement ne se déclenche.

+0

Il n'y a donc pas de moyen simple de simplement détecter quand quelqu'un a fini d'utiliser une application et d'exécuter un script de nettoyage? Je pense que cela devrait être beaucoup plus facile que cela:/ – Dave

+0

Eh bien, si l'utilisateur est connecté alors vous pouvez utiliser l'événement Session_End également dans Global.asax Par défaut, il est 20 minutes, mais vous pouvez définir votre propre limite. Voir http://stackoverflow.com/questions/621744/how-to-handle-session-end-in-global-asax et http://justgeeks.blogspot.com/2008/07/aspnet-session-timeouts.html –

+0

Ah, d'accord. Donc, si je déclare une liste dans le fichier global.asax, instanciera-t-elle une nouvelle liste pour la session de chaque utilisateur, ou est-ce que je déclare la liste dans mon programme et que global.asax y a accès. Comme je l'ai dit, je m'excuse pour les questions de base ... Je suis généralement assez bon pour figurer ces choses sur mon propre mais pour une raison quelconque, le global.asax n'est pas très intuitif pour moi. – Dave

2

MSDN Link et Wikipedia Link sont les endroits par où commencer.

Il n'est pas utilisé comme une interface, plus comme un filtre qui a un tas de différents hooks pour des choses comme le démarrage de l'objet Application ou une session ou une demande. Le lien Wikipedia a une liste d'appels que le Global.asax peut faire, bien que je suggère de prendre un peu de recul pour comprendre comment une application Web se termine par rapport à une application de bureau. IIS peut recycler un AppPool comme un moyen de mettre fin à l'application, bien qu'il y en ait d'autres, donc la définition d'un nettoyage à la fin de l'application n'est peut-être pas la meilleure idée si cet événement ne se déclenche jamais.

+0

J'ai lu les deux, mais cela m'a conduit à plus de confusion. Il me semble que ceux-ci suggèrent que global.asax est uniquement utilisé pour stocker des variables accessibles depuis N'IMPORTE QUELLE session ou N'IMPORTE QUELLE application. Ce qui est utile, mais pas pour ce que je fais en ce moment. J'avais l'impression que global.asax pouvait créer des threads pour gérer un démarrage d'application individuel et une fin d'application individuelle. – Dave

+0

Je pense que vous pouvez avoir un malentendu sur l'utilisation des objets Session et Application dans ASP.Net. Une Session existe pour chaque utilisateur connecté de sorte que si l'utilisateur A a une variable stockée dans l'objet Session, elle n'est accessible à personne mais à l'utilisateur A. En revanche, l'objet Application est vraiment global en ce qu'il n'y en a qu'un quand le serveur est en cours d'exécution, donc il faut faire attention à l'utiliser comme si vous voulez stocker les informations de l'utilisateur A dans l'objet Application, vous devez utiliser un moyen de marquer la clé afin qu'elle soit unique à cet utilisateur. Vous pouvez créer un fil n'importe où dans ASP.Net –

Questions connexes