Um ehrlich zu sein, habe ich versucht, einen schmutzigen Trick mit IIS zu machen, und als ich dachte, ich würde damit durchkommen, wurde mir klar, dass meine Problemumgehung nicht funktioniert. Folgendes habe ich versucht:
1) Ich habe eine ASP.NET-Anwendung mit einer Preloader- Klasse, die IProcessHostPreloadClient erbt und die gesamte umfangreiche Initialisierung bei der Implementierung der Preload- Methode durchführt (die Anwendung ist komplex und Teil eines riesigen Systems, sodass etwa 2 Minuten erforderlich sind, um Verbindungen zu allen erforderlichen Verbindungen herzustellen Dienste und einige Unity-Registrierungen vorab instanziieren).
2) Ich habe eine Menge Arbeit, die beim Herunterfahren der Anwendung erledigt werden muss (Abbestellen, Trennen, Entsorgen, ...), und ich denke, der beste Ort dafür ist die * Application_End * -Methode in Global.asax .
3) Alles funktioniert einwandfrei, wenn ich Benutzeraktivität habe (die erste Anforderung nach dem Start des Anwendungspools, der die oben genannte Webanwendung enthält, führt dazu, dass * Application_Start * aufgerufen wird und anschließend * Application_End * beim Stoppen oder Recyceln des Anwendungspools aufgerufen wird), aber Probleme Tritt auf, wenn keine Benutzeraktivität vorliegt und die Anwendung versucht, sich nach 48 Stunden Aktivität neu zu starten (konfigurierte Anforderung). Da es keine Anfragen gab, wurde die Bewerbung offiziell nicht gestartet. Ergo kann es nicht ordnungsgemäß gestoppt werden, da * Application_End * nicht aufgerufen wird.
4) Jetzt kommt der unordentliche Teil ... Ich habe versucht, am Ende der Preload- Methode eine GET-Anfrage aus dem Code zu stellen , und es hat funktioniert. Aber diese Lösung schien mir schlecht, obwohl sie funktionierte. Also habe ich viele Dinge ausprobiert und das Letzte, was ich versucht habe, war Folgendes:
SimpleWorkerRequest swr = new SimpleWorkerRequest(string.Empty, string.Empty, tw);
HttpRuntime.ProcessRequest(swr);
... und das hat seinen Zweck erfüllt. * Application_Start * wurde aufgerufen (ich habe die Antwort überprüft, sie enthielt die Anmeldeseite, die bei der ersten Anforderung angezeigt werden sollte), und beim Herunterfahren des Anwendungspools wurde die Anwendung ordnungsgemäß beendet, indem die erforderlichen Arbeiten in * Application_End * ausgeführt wurden.
ABER
Nachdem die Anwendung auf diese Weise gestartet (vorinstalliert und initiiert) wurde, geschah Folgendes, als ich die Anwendung über einen Webbrowser erreichen wollte:
HTTP-Fehler 500.21 - Interner Server-Fehlerbehandler "ExtensionlessUrlHandler-Integrated-4.0" hat ein fehlerhaftes Modul "ManagedPipelineHandler" in seiner Modulliste
Ich kann das nicht herausfinden. Kann mir jemand sagen, warum dies passiert und wie man es behebt?
Wenn ich das nicht herausfinde, werde ich zur ersten Lösung zurückkehren (GET-Anfrage vom Code senden), aber dieses Problem wird mich nerven, da ich nicht einmal eine Idee habe, was falsch ist.
quelle
Antworten:
Das Problem
Sie verwenden SimpleWorkerRequest in einem Szenario, für das es nicht entwickelt wurde. Sie verwenden es in IIS . Wenn Sie sich den vorherigen MSDN-Link ansehen (Schwerpunkt liegt bei mir):
Wenn Sie sich die MSDN-Dokumentation für den System.Web.Hosting-Namespace ansehen (
SimpleWorkerRequest
befindet sich in diesem Namespace), sehen Sie auch etwas Ähnliches wie oben (der Schwerpunkt liegt wieder bei mir):Die Lösung
Ich würde empfehlen, den Anruf zu entfernen
SimpleWorkerRequest
. Stattdessen können Sie eine Microsoft-Lösung verwenden, um sicherzustellen, dass Ihre Website nach dem Recycling automatisch gestartet wird. Was Sie benötigen, ist das Microsoft Application Initialization Module für IIS 7.5 . Die Konfiguration ist nicht kompliziert, aber Sie müssen die genauen Optionen kennen. Deshalb würde ich auch das empfehlen Benutzeroberfläche für Anwendungsinitialisierung für IIS 7.5 . Die Benutzeroberfläche wird von einem MSDN-Blogger geschrieben.Was genau macht die Microsoft-Lösung? Es macht das, was Sie versuchen - IIS sendet nach dem Start des Anwendungspools eine "Get" -Anforderung an Ihre Website.
quelle
Versuchen Sie, ASP.NET bei neu zu registrieren
aspnet_regiis -i
. Es hat bei mir funktioniert.Ein wahrscheinlicher Pfad für .NET 4 (von der Eingabeaufforderung mit erhöhten Rechten):
http://forums.iis.net/p/1190643/2026401.aspx
quelle
Wenn dieser Fehler mit Windows 8 / Windows Server 2012 und .Net 4.5 auftritt, befolgen Sie diese Anweisungen hier: http://www.britishdeveloper.co.uk/2013/01/handler-extensionlessurlhandler.html
Gehen Sie zu "Windows-Funktionen ein- oder ausschalten", dann zu Internetinformationsdiensten, dann zu World Wide Web Services und dann zu Anwendungsentwicklungsfunktionen, und aktivieren Sie dann ASP.NET 4.5
Dies hat bei mir funktioniert (obwohl der Assistent und der Wortlaut in Windows Server 2012 etwas anders sind, aber Sie werden es herausfinden). Warum dies nach der Installation aller Elemente über das Web Platform Installer einschließlich aller Abhängigkeiten erforderlich ist, ist mir völlig unverständlich ...
quelle
Obwohl ich den meisten Ratschlägen auf dieser Seite gefolgt bin, gab es unter Windows Server 2012 immer noch Probleme. Durch die Installation von .NET Extensibility 4.5 wurde das Problem für mich behoben:
Add Roles and Features > Server Roles > Web Server (IIS) > Web Server > Application Development > .NET Extensibility 4.5
quelle
Verwenden Sie für Windows 10 / Windows Server 2016 den folgenden Befehl:
dism /online /enable-feature /featurename:IIS-ASPNET45 /all
Die vorgeschlagenen Antworten mit
aspnet_regiis
funktionieren nicht unter Windows 10 (Creators Update und höher) oder Windows Server 2016:Interessanterweise konnte ich im Dialogfeld "Windows-Funktionen ein- / ausschalten" weder .NET noch ASP.NET 4.6 deaktivieren, und nur der obige Befehl DISM funktionierte. Ich bin mir nicht sicher, ob der Name der Funktion korrekt ist, aber es hat bei mir funktioniert.
quelle
Führen Sie einen der folgenden Befehle aus:
Für 32-Bit-Windows-Betriebssysteme:
Für 64-Bit-Windows-Betriebssysteme:
quelle
Diese https://stackoverflow.com/a/13266763/1277458 funktioniert einwandfrei. Wenn Sie jedoch ein 64-Bit-Betriebssystem haben, verwenden Sie Framework64 anstelle von Framework im Pfad:
quelle
In meinem Fall (Windows 10 + IIS 10) musste ich " Windows-Funktionen aktivieren oder deaktivieren " öffnen und dann zu Internetinformationsdienste> World Wide Web Services> Anwendungsentwicklungsfunktionen> gehen und ASP.NET 4.6 überprüfen
quelle
Dies zu einem eigenen Beitrag zu machen, weil ich stundenlang damit beschäftigt war.
Ich habe hier und anderswo vielleicht ein Dutzend ähnlicher Beiträge über dieses Problem und die Behebung von aspnet_regiis gesehen. Sie arbeiteten nicht für mich und aspnet_regiis verhielt sich seltsam, listete nur Optionen usw. auf.
Wie der Benutzer ryan-anderson oben angegeben hat, können Sie .exe nicht eingeben
Für diejenigen, die mit Dingen außerhalb von IIS auf dem Server weniger vertraut sind, tun Sie Folgendes in einfachen Schritten.
Suchen Sie aspnet_regiis in einem Ordner, der diesem Pfad ähnlich ist. c: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \
Klicken Sie im Startmenü oder wo auch immer mit der rechten Maustaste auf die Eingabeaufforderung und weisen Sie sie an, als Administrator ausgeführt zu werden. Die Verwendung der Windows-Funktion "Ausführen" funktioniert einfach nicht oder nicht für mich.
Kehren Sie zur ausführbaren Datei aspnet_regiis zurück. Klicken und ziehen Sie es direkt in die Eingabeaufforderung oder kopieren Sie die Adresse in die Eingabeaufforderung.
Entfernen Sie, falls vorhanden, die EXE-Datei am Ende. Das ist der Schlüssel. Fügen Sie am Ende das -i (Leerzeichen minus Auge) hinzu. Eingeben.
Wenn Sie dies richtig gemacht haben, werden Sie sehen, dass es beginnt, asp.net zu installieren, und Ihnen dann mitteilen, dass es erfolgreich war.
quelle
Stellen Sie sicher, dass Sie Ihre
application-site
Version vonv2.0
bisv4.0
in IIS Manager festgelegt haben :Danach installieren Sie Ihre
ASP.NET
.Für 32-Bit-Betriebssysteme (Windows):
Für 64-Bit-Betriebssysteme (Windows):
Starten Sie Ihren
application-site
in IIS Manager neu und genießen Sie.quelle
Ich weiß, dass dies ein Oldie ist, dachte aber, ich könnte einen Mehrwert schaffen. Für diejenigen von uns, die Server Core außerhalb einer Domäne ausführen (Domänenmitglieder können den Server-Manager nur remote ausführen, um Funktionen / Rollen hinzuzufügen / zu entfernen), müssen Sie auf Befehlszeilen zurückgreifen.
Powershell-Benutzer können "Install-WindowsFeature Web-Asp-Net45" eingeben.
Dies sollte der Verwendung des Server-Managers entsprechen.
quelle
Ich wurde von der gleichen Fehlermeldung mit .net 4.7 herausgefordert.
Die Lösung bestand darin, einem zuvor erwähnten Beitrag zu folgen, um mit der Funktion "Windows ein- oder ausschalten" zu beginnen, in der "Erweiterte Dienste für .NET Framework 4.7" -> "ASP.NET 4.7" bereits aktiviert war.
Weiter unten in der Liste befinden sich die "Internetinformationsdienste" und die Unternote "Anwendungsentwicklungsfunktionen" -> "ASP.NET 4.7", die ebenfalls überprüft werden müssen.
Wenn Sie dies aktivieren, werden viele andere Funktionen aktiviert ... Ich habe einfach die OK-Taste gedrückt und das Problem wurde behoben. Screendump des Windows-Funktionsdialogs
quelle
Ich arbeite an Windows Server 2012. Die Funktion .NET Extensibility 4.5 ist aktiviert. WebDAVModule entfernt. Ich habe immer noch einen 500.21-Fehler auf der ASP.NET-Route '/ docs' erhalten.
Das Ändern von 'skipManagedModules' in false hat das Problem behoben.
Vielen Dank an https://groups.google.com/forum/#!topic/bonobo-git-server/GbdMXdDO4tI
quelle
Ich habe dieses Problem gelöst und in "Windows-Funktionen aktivieren oder deaktivieren" die Option ASP.NET 4.7 hinzugefügt
quelle
Ich hatte dieses Problem und stellte fest, dass das Entfernen des folgenden Ordners auch bei der Nicht-Express-Edition hilfreich war. Express:
C:\Users\<user>\Documents\IISExpress
quelle
Dieser Fehler ist mir letzte Woche aus dem Nichts passiert und hat sich auf die vorhandenen Websites auf meinem Computer ausgewirkt. Ich hatte kein Glück damit, einen der Vorschläge hier auszuprobieren. Schließlich habe ich WebDAV vollständig aus IIS entfernt (Windows-Funktionen -> Internetinformationsdienste -> World Wide Web-Dienste -> Allgemeine HTTP-Funktionen -> WebDAV-Veröffentlichung). Danach habe ich aus gutem Grund einen IIS-Reset durchgeführt, und mein Fehler wurde schließlich behoben.
Ich kann nur vermuten, dass ein Windows-Update das Problem ausgelöst hat, bin mir aber nicht sicher.
quelle
Sie können das Problem beheben, indem Sie den Typ "ExtensionlessUrlHandler-Integrated-4.0" in iis in System.Web.DefaultHttpHandler ändern
quelle
Beim Entfernen von WebDAV von meinem Server hat die Anwendung
503 Service Unavailable
bei Verwendung vonPUT
oder eine Fehlermeldung zurückgegebenDELETE
, sodass ich sie erneut installiert habe. Ich habe auch versucht, .NET Framework 4.5 vollständig zu entfernen und neu zu installieren. Außerdem habe ich versucht, mich wie vorgeschlagen neu zu registrieren, aber ohne Erfolg.Ich konnte dies beheben, indem ich WebDAV für den einzelnen Anwendungspool deaktivierte. Dadurch wurde der Fehler "Bad Module" bei Verwendung von
PUT
oder gestopptDELETE
.Deaktivieren Sie WebDAV für den individuellen App-Pool:
WebDAV Authoring Tools
in der ListeDisable WebDAV
oben rechts.Ta daaaa!
Ich habe die entfernten Elemente immer noch in meiner
web.config
Datei belassen .Über diesen Link habe ich die Anweisungen gefunden, aber es ist nicht sehr klar.
quelle
Dies ist möglicherweise keine nützliche Lösung für OP, betrifft jedoch dieselbe "Fehlermeldung".
Wir hosten PHP-Seiten auf IIS8.5 mit korrekt installiertem .NET 4.5.
Wir nutzen die Preload-Funktion, um sicherzustellen, dass unsere Anwendung immer auf der ganzen Linie reagiert.
Nach einer Weile wurde dieser Fehler zufällig angezeigt.
In der web.config: Ich setze skipManagedModules auf true, -> mach das nicht!
Obwohl die Website PHP ist, wird das Routing zum Paging von den Modulen verwaltet !!!
quelle
Ich bin auch auf dieses Problem gestoßen. Meine MVC4-App wird unter Windows Server 2012 R2 mit IIS 8.5 ausgeführt. Keine dieser veröffentlichten Lösungen hat bei mir funktioniert ... Die Installation der fehlenden Frameworks über IIS-Funktionen hätte das Problem möglicherweise beheben können, aber die Installation ist immer fehlgeschlagen.
Ich musste
Web Platform Installer
die folgenden Pakete verwenden und installieren:quelle
Ich hatte dieses Problem in einer Webanwendung, die auf einem gemeinsam genutzten Hosting-Server gehostet wurde. Offensichtlich hatte er keinen direkten Zugriff auf IIS und konnte daher viele der hier vorgeschlagenen Lösungen nicht anwenden.
In der Systemsteuerung des Hosting-Anbieters habe ich die Fehlerprotokollierung für IIS und ASP.Net aktiviert. Und dann erfuhr ich, dass der Fehler tatsächlich in einem fehlenden cshtml lag.
quelle
Die Installation von .NET 4.7 hat bei mir funktioniert. Ich hatte vorher nur 3.5 installiert.
quelle