2009-08-24 5 views
4

Ich verwende in Speicher-Sitzungen in meiner ASP.NET MVC-Anwendung, was bedeutet, dass ich nur ein einziges Worker-Thread korrekt haben kann? Bedeutet das, dass ich parallel in meiner Anwendung arbeite (denke gleichzeitige Anfragen) oder nicht? Akzeptiert meine Anwendung jeweils nur eine Anfrage?ASP.NET Single Worker Thread? (In Memory Session)

bearbeiten: Nach der IIS7 Website:

If the application uses in-process session variables, 
the application will not function correctly, because the same user requests 
are picked up by different worker processes that 
do not share the same session details. 

Dies bedeutet also, In-Memory-Sitzung nur 1 Worker-Thread haben kann oder nicht? Siehe auch here von den IIS7-Foren.

+0

Prozesse und Threads bedeuten verschiedene Dinge im Kontext von ASP.NET und IIS. Mehrere Prozesse bedeuten, dass Sie mehrere Sitzungsspeicher haben. –

Antwort

3

Ihre Anwendung empfängt mehrere Anfragen gleichzeitig. Auf der Grundlage Ihrer Änderungen und Kommentare suchen Sie nach Informationen zu Web-Gärten und -Sitzungen im Gegensatz zu Threads und Sitzungsstatus.

Web Gardens verwenden mehrere Prozesse und verhalten sich beim Sitzungsstatus wie ein Lastenausgleich. Jeder Prozess verfügt über einen separaten Sitzungsspeicher im Speicher. IIS sendet Anforderungen an jeden verfügbaren Prozess. Da die Prozesse keinen Sitzungsstatus haben, funktioniert die Sitzungsnutzung nur dann wirklich, wenn Ihr Sitzungsanbieter von allen Webgarten-Prozessen gemeinsam genutzt wird.

Web-Gärten sind nur sinnvoll, wenn Sie etwas wie SQL Server für den Sitzungsstatus verwenden und eine Affinität zu einer bestimmten CPU/einem bestimmten Kern haben möchten. Da Sie die Anzahl der Threads erhöhen können, ist dies für einige Benutzer eine geeignetere Optimierung als die Verwendung von Webgärten. Einige Anwendungen können jedoch aufgrund einer bestimmten Arbeitslast oder Anwendungscharakteristik besser mit Webgärten arbeiten. Die Verwendung von Webgärten in Tests könnte auch dabei helfen, einige potenzielle Probleme zu lösen, die beim Lastenausgleich auftreten.

Ich glaube, es verwendet den .NET ThreadPool und hat standardmäßig 20 Threads. Jede Anfrage, die auf den Server kommt, kann in einem separaten Thread behandelt werden. Die ASP.NET performance guidelines haben einige Informationen zu diesem Thema.

+0

Erstellt dies jedoch ein Problem mit der Sitzung im Speicher? Soweit ich weiß, müssen die Sitzungen auf dem gleichen Thread bleiben oder alles in die Luft geht. – Alex

+0

Ich sehe nicht, warum Threads mit Sitzungen verknüpft werden. Die Sitzungs-ID sollte ausreichen, um die Sitzungsdaten zu suchen, sodass kein Grund für die Zuordnung zu demselben Thread besteht. Sitzungsdaten werden getrennt gespeichert, auch wenn sie sich im Speicher befinden. Die gleichen APIs werden verwendet, um die anderen Sitzungsanbieter anzuschließen. –

+0

Aktualisierte die Frage mit Zitat von IIS7 Site & Forum Link. Angeblich im Prozess (im Speicher) Sitzung teilt keine Informationen über Worker Threads. Ist das eine falsche Information? – Alex

-1

In Speicher Sitzungen bedeutet sollten Sie in der Regel ein Front-End-Web nur Gewinde Server zu einem Zeitpunkt, keinen einzigen Arbeiter haben: D

Der Grund in der Sitzung gespeichert ist, dass alle Informationen auf einer Maschine nicht verfügbar auf der anderen Seite. Wenn Sie zwei Front-End-Webserver haben und Ihr Proxy oder Ihre Firewall "Lastenausgleich" durchführt, wodurch Anfragen an Webserver zufällig zugewiesen werden, haben Sie Probleme. Das Problem wird jedoch leicht mit sogenannten "sticky sessions" gelöst, bei denen Benutzer immer zum selben Server geschickt werden.

-Oisin

+0

Follow-up: Warum können Sie nicht "Web-Garten" Verarbeitung auf Ihrem Computer dann über mehrere CPU auf einem Server aktivieren? Dies verursacht einen zufälligen Sitzungsverlust. – Alex

+0

Mein Verständnis ist, dass ein Web-Garten mehrere Prozesse auf einer Maschine erstellt. Jeder Prozess hat einen anderen Sitzungszustandsspeicher. –