2009-09-08 9 views
10

La classe HttpApplication étendue par Global.asax.cs existe-t-elle pour la durée de vie de l'application?ASP.NET HttpApplication cycle de vie

À quel moment des instances peuvent-elles être créées/détruites?

Je rencontre deux fois le lancement d'application_start, il semble que ce soit quelque chose à voir avec le recyclage de l'application et les requêtes faites à travers ce processus. Je ne l'ai pas encore débogué et je n'ai pas le temps en ce moment de le faire en profondeur. Donc, par rapport à la question ci-dessus, est la suivante une solution sûre?

public class MvcApplication : System.Web.HttpApplication 
{ 
    public static object syncLock = new object(); 
    public static bool applicationBooted; 

    protected void Application_Start() 
    { 
     if(!applicationBooted) 
     lock (syncLock) 
     if(!applicationBooted) 
     { 
      // bootstrap here 
      applicationBooted = true; 
     } 
    } 
} 
+0

Avez-vous découvert votre problème? J'ai un problème très similaire. –

+0

@Piotr Je pense que c'était un hareng rouge, je pense que j'avais un problème de threading ailleurs dans mon code de démarrage et l'envoi de deux demandes initiales l'envoyait drôle. Je ne m'en souviens pas, désolé –

Répondre

4

A partir de la page en ligne MSDN,

Après tous les objets d'application de base ont été initialisés, l'application est lancée en créant une instance de la classe HttpApplication. Si l'application a un fichier Global.asax, ASP.NET crée à la place une instance de la classe Global.asax qui est dérivé de la classe HttpApplication et utilise la classe dérivée pour représenter l'application.

ASP.NET Application Life Cycle Overview

+4

Cela n'explique pas pourquoi c'est créé ou seulement l'événement appelé deux fois. –

6

Si vous voyez l'événement deux fois dans vos journaux, vérifiez que le pool d'application est définie pour frayer un seul processus de travail. Chaque processus de travail va créer sa propre instance de HttpAppication.

+0

Est-ce que app_start ne devrait toujours pas être déclenché une seule fois? Ne veux-je pas> 1 processus de travail? –

+1

Lorsque vous configurez le pool d'applications pour qu'il s'exécute avec un processus de travail> 1, vous exécutez le mode Jardinage Web. Chaque processus est isolé des autres et exécute sa propre instance du pipeline. –

+0

cela signifie-t-il que vous obtenez beaucoup de w3wp.exe pour le même site IIS? –

Questions connexes