2009-09-08 11 views
10

Existiert die um Global.asax.cs erweiterte HttpApplication-Klasse für die Lebensdauer der Anwendung?ASP.NET HttpApplication lifecycle

An welchem ​​Punkt können Instanzen erstellt/zerstört werden?

Ich erlebe Application_start fire zweimal, scheint es etwas zu tun mit dem App-Pool-Recycling und machen Anforderungen Teilweise Weg durch diesen Prozess. Ich habe es noch nicht ganz ausprobiert und ich habe im Moment keine Zeit, dies zu vertiefen. Also, in Bezug auf die obige Frage, ist das Folgende eine sichere Lösung?

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

Haben Sie herausgefunden, was Ihr Problem war? Ich habe ein sehr ähnliches Problem. –

+0

@Piotr Ich denke, das war ein Ablenkungsmanöver, ich denke, ich hatte ein Threading-Problem an anderer Stelle in meinem Startup-Code und das Senden von zwei ersten Anfragen waren lustig. Kann mich nicht erinnern, tut mir leid –

Antwort

4

Aus der MSDN-Online-Seite,

Nachdem alle Kernanwendungsobjekte initialisiert wurden, wird die Anwendung durch eine Instanz von der Httpapplication-Klasse gestartet. Wenn die Anwendung eine Global.asax Datei hat, ASP.NET schafft stattdessen eine Instanz von die Global.asax Klasse, die von der Httpapplication Klasse abgeleitet ist und verwendet die abgeleitete Klasse die Anwendung zu repräsentieren.

ASP.NET Application Life Cycle Overview

+4

Es erklärt nicht, warum es erstellt wird oder nur das Ereignis zweimal aufgerufen wird. –

6

Wenn Sie das Ereignis zweimal in Ihre Protokolle sehen, überprüfen Sie, dass der Anwendungspool einen einheitlichen Arbeitsprozess, um laichen. Jeder Arbeitsprozess erstellt seine eigene Instanz der HttpAppication.

+0

Sollte app_start nicht immer nur einmal ausgelöst werden? Will ich nicht> 1 Arbeiterprozesse? –

+1

Wenn Sie den App-Pool so konfigurieren, dass er mit> 1 Worker-Prozess ausgeführt wird, führen Sie den Web Garden-Modus aus. Jeder Prozess ist von den anderen isoliert und führt seine eigene Instanz der Pipeline. –

+0

bedeutet dies, dass Sie viele w3wp.exe für die gleiche IIS-Site bekommen? –

Verwandte Themen