2 Stimmen

ASP.NET-Anwendungslebenszyklus + Lebensdauer der Singleton-Instanz

Betrachten Sie bitte das folgende Szenario:

  1. Ich habe eine vollständige Webanwendung mit dem ASP.NET MVC 3 Framework erstellt. Jetzt wird meine Anwendung von einem Webserver verwaltet.
  2. Auf der Server-Seite meiner Anwendung geht eine HTTP-Anfrage ein.
  3. Eine Klasse, die das Singleton-Entwurfsmuster implementiert, wird auf der Serverseite instanziiert.
  4. Eine Antwort wird an den Browser gesendet.
  5. Eine weitere HTTP-Anfrage wird auf der Server-Seite meiner Anwendung empfangen. Ist die in Schritt 2 verwendete Singleton-Instanz auf der Serverseite noch verfügbar?

Ich habe auf dieser Seite einige Informationen über den Lebenszyklus einer ASP.NET-Anwendung gelesen: http://msdn.microsoft.com/en-us/library/ms178473.aspx

Aber ich bin immer noch nicht in der Lage, meine Frage zu beantworten.

Vielen Dank im Voraus für Ihre zukünftige Hilfe


Ich habe gerade einige Tests unter VS2010 gemacht.

Hier ist die Liste der Hauptkomponenten meines Projekts:

  • Der Home-Controller, der eine Index-HttpGet-Aktionsmethode enthält.
  • Die Ansicht, die sich aus der Aktionsmethode Index ergibt.
  • Die SingletonTest-Klasse, die das Singleton-Entwurfsmuster implementiert.

Hier ist der Code der SingletonTest-Klasse:

public class SingletonTest
{
    private int counter;
    private static SingletonTest instance = null;

    public int Counter
    {
        get
        {
            return counter;
        }
    }

    public static SingletonTest Instance 
    {
        get 
        {
            if (instance == null)
                instance = new SingletonTest();

            return instance;
        }
    }

    private SingletonTest() 
    {
        counter = 0;
    }

    public void IncrementCounter()
    {
        counter++;
    }
}

Hier ist der Code der Methode Index action :

public ActionResult Index()
{
    SingletonTest st = SingletonTest.Instance;
    st.IncrementCounter();

    return View();
}

Hier ist der Code der Ansicht :

@SingletonTest.Instance.Counter

Hier das Testszenario, das ich verfolgt habe:

  1. Der IIS-Server wurde automatisch von VS2010 gestartet.
  2. Ich habe die URL /Home/Index/ angefordert und der Wert 1 wurde angezeigt.
  3. Ich habe die URL /Home/Index/ angefordert, dann wurde der Wert 2 angezeigt.
  4. ...

Dieser Test zeigt, dass die in Schritt 1 erstellte SingletonTest-Instanz bei der Verarbeitung der nächsten Anfragen verfügbar ist. Ich vermute, dass meiner Webanwendung auf dem Server ein Speicherplatz zugewiesen wurde.

Dann habe ich den IIS-Server gestoppt und mein Testszenario erneut durchgeführt. Ich habe die gleichen Ergebnisse wie zuvor erhalten: 1, 2, ....

0voto

Lester Punkte 4093

Auch wenn das Singleton über mehrere Anfragen hinweg bestehen bleibt, müssen Sie aus genau den Gründen Ihres zweiten Tests vorsichtig sein - wenn IIS neu gestartet oder der App-Pool recycelt wird, geht alles verloren.

Sind Sie sicher dass Sie eine Singleton-Instanz benötigen?

Wenn Sie einen Zustand über alle Anfragen hinweg beibehalten wollen, wäre es besser, einen externen Speicher wie eine Datenbank zu verwenden.

0voto

Was ist mit mehreren Instanzen der gleichen Anwendung, die IIS erstellen wird, um die gleichzeitigen Anforderungen zu verarbeiten?

Ich denke, Singleton Object wird nicht das gleiche sein, wenn IIS mehrere Instanzen der gleichen Anwendung in hohem Verkehr Situation erstellen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X