2009-01-02 5 views

Antwort

12

Wenn dies .NET 2.0 oder höher ist, können Sie eine Datei "App_offline.htm" hinzufügen, eine Anforderung an den Server senden, sie entfernen und dann eine weitere Anforderung an den Server senden.

Diese Sequenz von Ereignissen wird ASP.NET zwingen, die Anwendung so lange zu entladen, wie die Datei app_offline.htm in dem Ordner vorhanden ist.

Scott Guthrie Blog-Eintrag auf sie: http://weblogs.asp.net/scottgu/archive/2005/10/06/426755.aspx

+0

tut nicht nur das System offline. Ich möchte es mit sauberem Cache/Sitzung und dergleichen neu starten/neu laden. Wenn ich die app_offline.htm entferne, wird sie standardmäßig wiederhergestellt. – MikeJ

+0

@MikeJ - nein. Es fährt die App herunter und entlädt die App-Domäne vom Server, bis die Datei entfernt wird. –

+3

@MikeJ - Bitte beachten Sie auch, dass dies keine programmatische Änderung ist. Sie müssen die Datei physisch hinzufügen und entfernen, damit sie funktioniert –

6

Sie können den mit der App verknüpften Anwendungspool auch anhalten und starten.

+0

aber das ist von IIS richtig. In einigen Fällen habe ich möglicherweise keinen Zugriff auf die IIS-Box, daher suche ich nach etwas Programmatischem. – MikeJ

+1

Sie können den Anwendungspool mit WMI recyceln: http://blogs.iis.net/chrisad/archive/2006/08/30/Recycling-Application-Pools-using-WMI-in-IIS-6.0.aspx – Portman

+0

cool. Ich wusste das nicht – MikeJ

22

Berühren web.config aus innerhalb einer Anwendung ist eine schlechte Idee, IMO. Auch die Idee, eine Datei zu haben, die du veränderst, ist ein wenig Hackney, IMO.

Die Dokumentation ausdrücklich bestimmt, dass UnloadAppDomain die Anwendung geschlossen wird unten:

UnloadAppDomain programmatische Abschaltung nicht genutzter Anwendungen ermöglicht.

Sie sollten in der Lage sein, diesen Anruf überall in der Anwendung zu tätigen. Beachten Sie, dass Sie möglicherweise eine SecurityException erhalten, stellen Sie also sicher, dass die Laufzeitumgebung Ihnen die entsprechenden Berechtigungen erteilt (Sie könnten diese in eine Bibliothek stellen und einen Anruf tätigen und dann die Bibliothek im GAC mit Beweisen für vollständiges Vertrauen einrichten).

+2

ja. Deshalb habe ich gefragt. web.config Änderung schien hässlich und wahrscheinlich, uns auf thedailyWTF.com geschrieben zu bekommen :) – MikeJ

+2

Ich denke, eine bessere Zeile zu zitieren wäre: "Beendet die aktuelle Anwendung. Die Anwendung startet das nächste Mal, wenn eine Anfrage dafür erhalten wird." Der "unbenutzte" Teil in diesem Zitat könnte als "wird nur heruntergefahren, wenn niemand es benutzt" gelesen werden, was nicht der Fall ist. –

+2

Verwenden Sie System.Web.HttpRuntime.UnloadAppDomain() –

0

Wenn Sie den App-Pool nicht stoppen und starten möchten, können Sie ihn jederzeit recyceln.

2

Sie können eine Webanwendung problemlos neu starten, indem Sie einen Ordner zur Laufzeit im Anwendungsverzeichnis erstellen oder umbenennen. Offensichtlich müssen Sie dem Benutzer, der zum Ausführen der Anwendung berechtigt ist, die Berechtigung "Ändern" für das Webverzeichnis oder für ein Unterverzeichnis darunter erteilen.

das Verfahren erwähnt bei http://www.bartlannoeye.be/blog/restarting-a-.net-web-application-without-restarting-iis

habe ich den folgenden Code, um es in meinem Fall zu tun. Ändern Sie es, um auf einem "schreibbaren" Unterverzeichnis zu arbeiten

+0

gut das funktioniert nicht für mich. Ich sehe das Verzeichnis, das erstellt wird, aber das Ereignis application_Start wird nicht aufgerufen! – KMX

+0

Dieser Bart Lannoeye Link scheint tot zu sein – brennanyoung

7

dieser Code funktioniert für mich. rufen Sie es einfach auf, um die Anwendung neu zu laden.

System.Web.HttpRuntime.UnloadAppDomain(); 

Read more

Diese Methode wird nur unsere Anwendung entladen.Wenn Sie diese Methode in eine ASP.NET-Web-Schaltfläche einfügen, sind Sie völlig fertig. Wann wird unsere Anwendung neu geladen? Wenn Sie auf Ihre Schaltfläche klicken, wird zuerst unsere Methode gestartet und die Anwendung wird entladen. Weiter wird auf der Webseite, auf der wir gerade sind, auch neu geladen, da wir nur einen Knopf geklickt haben und die Webseite sich aktualisieren sollte. Nach dem Start unserer Methode führt der Seitenaktualisierungsprozess dazu, dass unsere Anwendung erneut geladen wird.

+0

Scheint gut zu funktionieren, und auf jeden Fall die einfachste Lösung hier gegeben! –

Verwandte Themen