2013-04-02 8 views
6

Wir haben ein Problem. Wir verwenden IISExpress 8.0 für Asp.net WebForm-Anwendung (. NET 4.0). Comupter läuft unter Windows 7 x64.ApplicationShutdownReason.BuildManagerChange und ApplicationPool Neustart in IISExpress

Manchmal ohne Grund wird ApplicationPool neu gestartet. Ich weiß, dass es nach 15 aspx \ ascx Dateiänderungen neu gestartet wird. Aber in diesem Fall startet es ohne Änderungen neu. Auf ApplicationEnd haben wir einen Grund für diesen Neustart gefunden. Es ist ApplicationShutdownReason.BuildManagerChange.

Suche im Internet wird nichts nützliche Details geben. Meistens empfehlen wir, IIS anstelle von IISExpress zu verwenden.

Weißt du, was könnte ein Grund dafür sein?

UPDATE:

tiefer Graben in dem Code .Net 4 Quelle gibt zwei Gründe für diese Abschaltung. Einer von ihnen wird ausgelöst, wenn jemand die Datei hash.web aus dem Ordner Temporary Asp.net geändert hat. Beispiel: "c: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Temporäre ASP.NET-Dateien \ app \ a83dcad1 \ be4aa699 \ hash \ hash.web"

Der zweite Grund ist, wenn BuildManager ein Objekt erstellt und Cached BuildResult in HttpCache. Und wenn es abgelaufen ist, prüft es, ob dieses BuildResult ShutdownAppDomainOnChange beim Ablauf des Cache benötigt. Und wenn es erforderlich ist, löst es BuildManagerChange Shutdown aus.

UPDATE2

In unserem Fall Neustart wurde durch hash.web Änderung verursacht. Scheint, IISExpress aktualisiert es ohne Quellcodeänderung, aber warum?

UPDATE3 Microsoft hat ein Problem darüber - https://connect.microsoft.com/VisualStudio/feedback/details/783440/microsoft-visualstudio-web-host-exe-touches-hash-web-and-should-not-be-running Sie sagen, dass sie es in Visual Studio 2012 Update 2.

+0

Wenn Sie Windows 7 verwenden, warum verwenden Sie nicht den vollständigen IIS? – ashes999

+0

Da die Konfiguration von ein paar Web-Projekt ist nicht so einfach für IIS. Wir können es schaffen, aber dann müssen wir dasselbe für jeden Entwickler tun. Daher ist es einfacher, mit IISExpress zu arbeiten, da es von einem Benutzer konfiguriert und von allen anderen verwendet wird. –

+0

Aus meiner Erfahrung ist IIS Express schrecklich. Die Konfiguration, die Sie erwähnen, ist etwas, was alle Entwickler tun müssen - es gibt keine Lösung. Auf lange Sicht sind diese Kosten viel kleiner als die Kosten von IisExpress-Seltsamkeit. – ashes999

Antwort

2

eine vollständige Antwort, so nehmen, was von ihr profitieren festen Dies ist nicht, dass Sie in Anspruch nehmen .

Es scheint, als ob zwei Dinge passieren: Die hash.web Änderung ist wahrscheinlich, weil IIS den temporären Speicherort verwendet, um die Anwendung DLL zu speichern, die Sie erstellen. Wenn diese Datei geändert wird, erkennt IIS, dass Sie eine neue Version der Anwendung erstellt haben und sie neu starten müssen. Das kann den Reset des Anwendungspools erklären.

Für den Cache-Ablauf scheint es, als ob IIS versucht, etwas in einer anderen App-Domäne zu entladen und neu zu laden. Es gibt keine Möglichkeit (in .NET), eine Assembly zu entladen, ohne eine App-Domain (denke ich) zu entladen, sobald sie geladen ist, also ist dies der "übliche" Weg, dies zu erreichen.

Vielleicht.

+0

Ja. Eigentlich ab .NET 4.0 gibt es eine Möglichkeit, Assembly zu entladen, aber es hat einige Kanten. Ich versuche, IISExpress mit Process Monitor abzufangen, um zu überprüfen, ob er diese Datei ändert. Ich habe einen Artikel mit ähnlichem Problem gefunden, bei dem Antivirus diese Datei überprüft und dadurch einen Neustart ausgelöst hat. Also, ich forsche nach Initiator dieser Änderung –

Verwandte Themen