HTTP-Fehler 500.22 – Internal Server Error (Einstellung im verwalteten Modus ungültig)

Michael Schwarz on Friday, November 7, 2008

Gestern Abend wollte ich mal schnell ein Web Projekt auf einem IIS 7 vom Classic Mode auf den Integrierten Pipelinemodus umstellen. Stellt man nur den Anwendungspool um, dann erhält man unter Umständen einen HTTP Fehler 500.22.

image

Nun, seit IIS 7 kann man in der generierten Fehlerseite sogar mal etwas nützliches finden. Da steht doch bei den möglichen Vorgehensweisen:

Migrieren Sie die Konfiguration in dem Abschnitt "system.webServer/modules". Sie können dies manuell oder mit dem Befehl "AppCmd" an der Befehlszeile durchführen. Beispiel: %SystemRoot%\system32\inetsrv\appcmd migrate config "Default Web Site/". Wenn Sie zum Migrieren der Anwendung den Befehl "AppCmd" verwenden, funktioniert diese sowohl im integrierten Modus als auch im klassischen Modus sowie mit früheren Versionen von IIS.

Hey, automatisch migrieren, ist ja cool. Also eine DOS Box aufgemacht und den Befehl eingegeben. Nichts tut sich, angeblich gibt es "Default Web Site/" nicht. Jetzt erinnere ich mich, das hatte ich mal umgestellt auf einen anderen Namen. Schade, dass hier der IIS nicht gleich den richtigen Namen mit ausgibt, müsste er ja wissen.

Ok, also richtigen Namen eingetragen für die Web Site und schon hat der IIS mir meine web.config angepasst. Ich rufe meine Web Site auf und erhalte JavaScript Fehler, auch funktionieren nicht alle meine HTTP Handler. Woran kann das nur liegen?

Während der Migration hat AppCmd mir die Reihenfolge der HTTP Handler verändert. In der alten web.config stand folgendes:

<httpHandlers>
<add verb="GET" path="ScriptEngine.ashx" type=".." />
<add verb="*" path="*.ashx" type=".." />
</httpHandlers>

Jetzt taucht zusätzlich der system.webServer tag am Ende der web.config auf, und dort stehen die HTTP Handler in der falschen Reihenfolge:

<handlers>
<add name="*.ashx_*" path="*.ashx" verb="*" type=".." preCondition="integratedMode,runtimeVersionv2.0" />
<add name="ScriptEngine.ashx_GET" path="ScriptEngine.ashx" verb="GET" type=".." preCondition="integratedMode,runtimeVersionv2.0" />
</handlers>

Die zwei HTTP Handler arbeiten auf der gleichen Dateiendung. Einer davon verarbeitet nur ScriptEngine.ashx, der andere soll alle *.ashx Aufrufe verarbeiten. In der migrierten web.config wird ScriptEngine.ashx nie mehr aufgerufen, und hat damit in meiner Web Anwendung Fehler erzeugt.