435 Stimmen

Ein ASP.NET-Einstellung wurde erkannt, die im integrierten Pipeline-Modus nicht gilt.

Ich habe DotNetOpenAuth SDK-3.4.5.10201.vsix installiert und es funktioniert nicht. Es funktioniert lokal (wenn ich es als localhost ausführe), aber wenn ich versuche, es zu veröffentlichen, funktioniert es nicht.

Die IIS-Fehlermeldung, die ich erhalte, lautet:

Fehlerzusammenfassung
HTTP-Fehler 500.22 - Interner Serverfehler
Eine ASP.NET-Einstellung wurde entdeckt, die im integrierten verwalteten Pipelinemodus nicht zutrifft.

und:

Modul       ConfigurationValidationModule  
Benachrichtigung BeginRequest  
Handler      StaticFile  
Fehlercode   0x80070032  

Dann gibt es einige Vorschläge, wie man das Problem lösen kann:

Dinge, die du ausprobieren kannst:

  • Migriere die Konfiguration in den system.webServer/modules-Abschnitt. Du kannst dies manuell tun oder AppCmd aus der Befehlszeile verwenden - zum Beispiel, %SystemRoot%\system32\inetsrv\appcmd migrate config "Default Web Site/". Die Verwendung von AppCmd zum Migrieren deiner Anwendung ermöglicht es, im integrierten Modus zu funktionieren und weiterhin im klassischen Modus und auf früheren Versionen von IIS zu funktionieren.

  • Wenn du sicher bist, dass es in Ordnung ist, diesen Fehler zu ignorieren, kann er deaktiviert werden, indem du system.webServer/validation@validateIntegratedModeConfiguration auf false setzt.

  • Alternativ wechsle die Anwendung zu einem Klassik-Modus-Anwendungspool - zum Beispiel, %SystemRoot%\system32\inetsrv\appcmd set app "Default Web Site/" /applicationPool:"Classic .NET AppPool". Tu dies nur, wenn du nicht in der Lage bist, deine Anwendung zu migrieren.
    (Setze "Default Web Site" und "Classic .NET AppPool" auf deinen Anwendungspfad und den Namen des Anwendungspools)

Das Problem ist, dass ich keinen Zugriff auf den ISS-Server habe, da ich nicht der Besitzer bin. Gibt es einen Weg, um das zu lösen?

834voto

David Punkte 33347

Die 2te Option ist die, die du möchtest.

In deiner web.config muss sichergestellt werden, dass diese Schlüssel vorhanden sind:

11 Stimmen

Das sollte die Sicherheit Ihrer App nicht wirklich beeinträchtigen. Es schaltet lediglich die Warnung aus, die besagt, dass Sie einige Konfigurationswerte haben, die nicht verwendet werden.

19 Stimmen

Dies ist eigentlich kein besonders kluger Ratschlag. Wenn Sie Einstellungen haben, die nicht verwendet werden, sollten Sie sie entfernen.

34 Stimmen

@Seph, widerspreche, dass dies kein solider Ratschlag ist. Viele NuGet-Installationen (zum Beispiel DotLess) fügen Einträge zu Abschnitten hinzu, die für den integrierten Modus gelten, und duplizieren diese Einstellung auch für den nicht integrierten Modus. Dies wird als Portabilität bezeichnet und ermöglicht es Ihrer Konfiguration zu funktionieren, unabhängig davon, ob Sie IIS7/integriert oder klassisch verwenden. Der einzige Grund, diese Validierungseinstellung auf true zu belassen, besteht darin, dass Sie Ihre Stützräder lassen können und IIS Sie anbrüllt, wann immer Sie eine Einstellung hinzufügen, die im integrierten Modus nicht funktioniert. Dies ist für Unerfahrene gedacht, aber es steht im Weg.

125voto

Jeremy Cook Punkte 18882

Durch das Hinzufügen von wird das Symptom behoben, aber dies ist nicht für alle Situationen angemessen. Nachdem ich mich einige Male mit diesem Problem herumgeschlagen habe, hoffe ich, anderen nicht nur zu helfen, das Problem zu überwinden, sondern es auch zu verstehen. (Was immer wichtiger wird, da IIS 6 langsam zu Legende und Gerücht wird.)

Hintergrund:

Dieses Problem und die Verwirrung darüber begannen mit der Einführung von ASP.NET 2.0 und IIS 7. IIS 6 hatte und hat weiterhin nur einen Pipelinemodus, der dem entspricht, was IIS 7+ als "Klassik" -Modus bezeichnet. Der zweite, neuere und empfohlene Pipelinemodus für alle Anwendungen, die auf IIS 7+ ausgeführt werden, wird "Integrierter" Modus genannt.

Also, was ist der Unterschied? Der Schlüsselunterschied besteht darin, wie ASP.NET mit IIS interagiert.

  • Klassischer Modus ist auf eine ASP.NET-Pipeline beschränkt, die nicht mit der IIS-Pipeline interagieren kann. Im Wesentlichen kommt eine Anfrage herein, und wenn IIS 6/Klassisch durch die Serverkonfiguration mitgeteilt wurde, dass ASP.NET damit umgehen kann, übergibt IIS die Anfrage an ASP.NET und fährt fort. Die Bedeutung davon kann anhand eines Beispiels abgeleitet werden. Wenn ich den Zugriff auf statische Bilddateien autorisieren wollte, könnte ich dies nicht mit einem ASP.NET-Modul tun, weil die IIS 6-Pipeline diese Anfragen selbst behandeln wird und ASP.NET diese Anfragen nie sehen wird, da sie nicht übergeben wurden.* Andererseits ist die Autorisierung, welcher Benutzer auf eine .ASPX-Seite wie eine Anforderung für Foo.aspx zugreifen kann, selbst in IIS 6/Klassisch trivial, weil IIS diese Anfragen immer an die ASP.NET-Pipeline übergibt. Im Klassikmodus weiß ASP.NET nicht, was es nicht gesagt bekommen hat, und es gibt viel, was IIS 6/Klassisch ihm möglicherweise nicht sagt.

  • Integrierter Modus wird empfohlen, weil ASP.NET-Handler und -Module direkt mit der IIS-Pipeline interagieren können. Die IIS-Pipeline übergibt die Anfrage nicht einfach an die ASP.NET-Pipeline, jetzt ermöglicht sie es ASP.NET-Code, direkt an die IIS-Pipeline anzuknüpfen und alle Anfragen, die darauf treffen. Dies bedeutet, dass ein ASP.NET-Modul nicht nur Anfragen an statische Bilddateien beobachten, sondern diese Anfragen auch abfangen und Maßnahmen ergreifen kann, indem der Zugriff verweigert, die Anfrage protokolliert usw.

Überwindung des Fehlers:

  1. Wenn Sie eine ältere Anwendung ausführen, die ursprünglich für IIS 6 entwickelt wurde, und sie möglicherweise auf einen neuen Server verschoben haben, kann es absolut nichts ausmachen, den Anwendungspool dieser Anwendung im Classic-Modus auszuführen. Machen Sie weiter, Sie müssen sich nicht schlecht fühlen.
  2. Andererseits haben Sie vielleicht Ihre Anwendung aufpoliert oder sie lief reibungslos, bis Sie eine Drittanbieterbibliothek über NuGet, manuell oder auf andere Weise installiert haben. In diesem Fall ist es durchaus möglich, dass httpHandlers oder httpModules zu system.web hinzugefügt wurden. Das Ergebnis ist der Fehler, den Sie sehen, weil validateIntegratedModeConfiguration standardmäßig auf true gesetzt ist. Jetzt haben Sie zwei Möglichkeiten:

    1. Entfernen Sie die Elemente httpHandlers und httpModules aus system.web. Daraus ergeben sich einige mögliche Ergebnisse:
      • Alles funktioniert einwandfrei, ein häufiges Ergebnis;
      • Ihre Anwendung beschwert sich weiterhin, es könnte eine web.config in einem übergeordneten Ordner geben, von dem Sie erben, überlegen Sie, auch diese web.config aufzuräumen;
      • Sie sind es leid, die httpHandlers und httpModules zu entfernen, die NuGet-Pakete ständig zu system.web hinzufügen, hey, tun Sie, was Sie tun müssen.
  3. Wenn diese Optionen nicht funktionieren oder mehr Ärger machen als es wert ist, werde ich Ihnen nicht sagen, dass Sie validateIntegratedModeConfiguration auf false setzen können, aber zumindest wissen Sie, was Sie tun und warum es wichtig ist.

Gute Lektüre:

*Natürlich gibt es Möglichkeiten, alle möglichen seltsamen Dinge in die ASP.NET-Pipeline von IIS 6/Klassisch über Beschwörungen wie Platzhalterzuordnungen zu bringen, wenn Sie auf solche Dinge stehen.

1 Stimmen

+1 Nur die Lösung ist keine Antwort auf Ihr Problem, sondern eine Lösung mit Erklärung, die die perfekte Antwort ist. Was es ist und warum wir dies ändern müssen, sind Fragen, die von @Jeremy Cook beantwortet werden.

0 Stimmen

Diese Erklärung führte mich dazu, das Problem für eine kleine Testseite zu beheben, die auf einem in IIS 7.5 im integrierten Modus gehosteten Testserver gehostet wird. Als ich ein neues MVC-Projekt erstellte, fügte es das HttpModule, Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpMod‌​ule, zu meiner Web.config hinzu. Dies liegt daran, dass ich die Option "Application Insights zum Projekt hinzufügen" aktiviert gelassen habe, als ich ein neues ASP.NET-Webanwendungsprojekt erstellt habe. Als ich das HttpModule aus der Web.config entfernte, funktionierte die Seite ohne Fehler. Das Einstellen von validateIntegratedModeConfiguration auf false hat funktioniert, aber das war nur ein vorübergehender Lösungsansatz.

2 Stimmen

Eine ASP.NET-Einstellung wurde erkannt, die im integrierten verwalteten Pipelinemodus nicht gilt. Dies ist wieder einmal eine nutzlose Microsoft-Fehlermeldung. ASP.net hat Tausende von Einstellungen, aber Microsoft hat nicht daran gedacht, diejenige einzuschließen, die den Fehler im Fehler-text verursacht. MS wird von Marketingspezialisten und nicht von Ingenieuren geführt, daher erwarte nicht, dass sich die Dinge in absehbarer Zeit verbessern. :-(

37voto

Wenn Sie immer noch das HTTP-Modul verwenden müssen, müssen Sie es (Framework .NET 4.0) wie folgt konfigurieren:

2 Stimmen

Ich glaube, dass die HttpModules-Eigenschaft in system.web für ASP 3.5 oder früher ist. Für ASP 4 oder höher verwenden Sie Module in system.webserver

2 Stimmen

@HoyCheung Es ist tatsächlich eine Frage der Verwendung von Integrated oder Classic Pipeline, nicht der .Net-Version, die entscheidet, ob system.web/httpModules oder system.webServer/modules verwendet werden sollen.

30voto

Gaʀʀʏ Punkte 4132

Ich bin auf dieses Problem gestoßen, aber hatte eine andere Lösung. Es beinhaltete ein Update des Control Panel>Administrative Tools>IIS Manager und die Rückkehr des Managed Pipelines meiner App-Seite von Integriert auf Klassisch.

3 Stimmen

Zustimmung - dies ist die bessere Option anstatt den Fehler einfach zu verbergen! Stellen Sie sicher, dass Sie den richtigen App Pool verwenden - sollte Classic und nicht Integrated sein

1 Stimmen

Ich benutze Visual Studio 2012, wie kann ich den App-Pool auf klassisch ändern.

10 Stimmen

Dies ist keine gute Lösung, wenn Sie alle neuen Funktionen verwenden möchten, die im integrierten Pipeline verfügbar sind. Dies ist so, als würden Sie aufgrund eines Problems von .NET 4.0 auf 2.0 zurückgreifen.

10voto

Jim Yu Punkte 121

Überprüfen Sie, ob es einen Konflikt in Ihrer IIS-Authentifizierung gibt. Zum Beispiel könnten sowohl die anonyme Authentifizierung als auch die ASP.NET-Verkörperung den Fehler verursachen.

0 Stimmen

Dies war die einzige machbare Antwort für mich.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X