Eine ASP.NET-App (versehentlich) in mehreren App-Domänen oder häufiges App-Recycing

8

Ich debugge eine ASP.NET-Anwendung, die zufällig den Inhalt einiger statischer Felder verliert. Ich habe eine einfache benutzerdefinierte Protokollierung durchgeführt (weil selbst log4net flockig war) und festgestellt, dass die Anwendung in zwei App-Domänen geladen wird. Hier ist ein Ausschnitt aus dem Protokoll:

%Vor%

Das Element nach der Uhrzeit / dem Datum ist der Name der aktuellen App-Domäne.

Die Anwendung ist nur eine reguläre ASP.NET (nicht MVC) -Anwendung, die eine AJAX-Anfrage bearbeitet und sie an eine Reihe von ASP.NET-Bibliotheken weiterleitet. Die einzige ungewöhnliche Sache ist, dass eine der Bibliotheken ein wenig Reflexion verwendet, um einige Klassen zu suchen, die sie dann instanziieren und auf separaten Threads ausführen. Aber es macht nichts explizit mit App-Domains.

Übrigens stammt die markierte Zeile aus der Protokolldatei von der ASP.NET-App selbst (d. h. nicht von einem dieser separaten Threads) von einem ASPX-Handler.

Interpretiere ich das Protokoll korrekt? Wenn ja, was kann dazu führen, dass eine Anwendung von mehreren App-Domains geladen und bedient wird?

Bearbeiten: Diese Frage bezieht sich im Wesentlichen auf diese Frage: ASP.NET-Anwendungsstatus im Vergleich zu einem statischen Objekt . Basierend auf dem, was ich heute gesehen habe, scheint es jedoch nicht möglich zu sein, sich auf statische Felder zu verlassen. Ich könnte alles auf das Application-Objekt verschieben, aber ich denke, eine Synchronisation wäre ein wenig umständlich. Ich bin mehr und mehr davon überzeugt, dass die Anwendung etwas nicht standardmäßiges tut.

Edit 2: Ich habe ein bisschen mehr Nachforschungen angestellt und es scheint, dass es immer eine 1-1 Beziehung zwischen Anwendungs- und App-Domains gibt (was ich erwarten würde). Also denke ich, dass was ich sehe, Recycling ist.

Bearbeiten 3: Nach einigen weiteren Experimenten und Stöbern habe ich die IIS-Zustandsüberwachung aktiviert (basierend auf Ссылка ), und festgestellt, dass die Anwendung zweimal in schneller Folge gestartet wird. Es ist ziemlich verwirrend. Hier sind die Log-Ereignisse:

%Vor%

Die MyApp-Anwendung befindet sich in einer anderen Anwendung (der RootApp). Was ich erwarten würde, wären zwei Log-Nachrichten: MyApp-Start und RootApp-Start.

    
Jan Zich 28.06.2011, 04:24
quelle

2 Antworten

2

Haben Sie versehentlich die Anzahl der Worker-Prozesse in den AppPool-Eigenschaften (Registerkarte "Leistung") auf 2 gesetzt?

In diesen Eigenschaften könnte es auch eine Einstellung geben, die Ihren AppPool viel zu oft recyceln lässt, basierend auf der Anzahl oder Anforderungen oder einer dieser Recyclingeinstellungen

    
Niels Ziegler 28.07.2011 13:23
quelle
1

Wenn ich raten müsste, dass sich auf Ihrer Site etwas befindet, das web.config, dlls, aspx, asmx oder eine andere Datei ändert. Wenn diese Dateien geändert werden, wird eine neue Instanz der Webanwendung gestartet, und alle neuen Anforderungen werden von dieser neuen Webanwendung aus bedient, während die alten Anforderungen von der vorhandenen Anwendung geliefert werden. Sobald alle alten Anforderungen abgeschlossen sind, wird die alte Anwendung heruntergefahren. Dies ist gut für Bereitstellungen, da es die vorhandenen Sitzungen nicht unterbricht, aber es bedeutet, dass Sie nichts haben sollten, was die web.config-Dateien bei jeder Anfrage oder ähnlichen Dingen automatisch ändert.

Diese Seite beschreibt viel detaillierter, wie das funktioniert Ссылка

    
Paul Mendoza 27.07.2011 14:59
quelle

Tags und Links