Verschieben einer ASP.NET-Anwendung von IIS 6.0 nach IIS 7.0
Aktualisiert: November 2007
In diesem Thema wird beschrieben, wie eine Webanwendung von Internetinformationsdienste (IIS) 6.0 nach IIS 7.0 verschoben wird. Webanwendungen in IIS 7.0 können für den klassischen Modus oder den integrierten Modus konfiguriert werden. Im klassischen Modus wird die Abwärtskompatibilität mit früheren Versionen von IIS mittels einer ISAPI-Erweiterung zum Aufrufen der ASP.NET-Laufzeit bewahrt. Bei dieser Option sind normalerweise nur wenig oder gar keine Änderungen an bestehenden Anwendungen notwendig.
Der integrierte Modus von IIS 7.0 ist eine vereinheitlichte Pipeline für die Anforderungsverarbeitung, bei der die ASP.NET-Anforderungspipeline und die IIS-Hauptanforderungspipeline miteinander kombiniert werden. Die integrierte Pipeline bietet eine verbesserte Leistung und Modularität bei Konfiguration und Verwaltung sowie Flexibilität bei der Erweitung von IIS durch Module mit verwaltetem Code. Beispielsweise kann ein Modul mit verwaltetem Code im Ordner App_Code der Webanwendung definiert und für das Anwenden auf alle IIS-Anforderungen registriert werden, z. B. Anforderungen für statische Dateien.
Bei Verwendung des integrierten Modus von IIS 7.0 sind eventuell kleinere Änderungen an der Datei Web.config einer Anwendung notwendig. Es können auch weitere Änderungen erforderlich sein, wenn die Anwendung benutzerdefinierte Module verwendet, bei denen die IHttpModule-Schnittstelle implementiert wird.
Eine Übersicht über die Pipeline für die Anforderungsverarbeitung im integrierten Modus in IIS 7.0 finden Sie unter Übersicht über den Lebenszyklus von ASP.NET-Anwendungen für IIS 7.0. Bei Verwendung von IIS 7.0 können Anwendungen im klassischen Modus und im integrierten Modus gleichzeitig auf demselben Server ausgeführt werden. Sowohl vom klassischen als auch vom integrierten Modus werden .NET Framework Version 2.0 und spätere Versionen unterstützt. .NET Framework Version 1.1 wird nur im klassischen Modus unterstützt. Weitere Informationen über die Aktualisierung früherer Versionen von IIS auf IIS 7.0 finden Sie unter Upgrading ASP.NET Applications to IIS 7.0: Differences between IIS 7.0 Integrated Mode and Classic Mode.
Hinweis: |
---|
Sie können die Informationen in diesem Thema verwenden, um Webanwendungen von IIS 5.x nach IIS 7.0 zu verschieben. Es können jedoch zusätzliche Änderungen notwendig sein, die hier nicht erläutert werden. Weitere Informationen finden Sie unter . |
Dieses Thema enthält folgende Abschnitte:
Web.config-Dateien in IIS 7.0
Verschieben einer Webanwendung zum klassischen Modus
Verschieben einer Webanwendung zum integrierten Modus
Web.config-Dateien in IIS 7.0
Beim Verschieben einer ASP.NET-Webanwendung zum integrierten Modus von IIS 7.0 muss die Datei Web.config aktualisiert werden. IIS 7.0 beinhaltet Änderungen bezüglich der Verwaltung von Web.config-Dateien und der Typen von Einstellungen, die in Web.config-Dateien gespeichert werden können. Die neuen Einstellungen befinden sich in einem neuen Konfigurationsabschnitt mit dem Namen system.webServer.
In IIS 6.0 bietet das ASP.NET-MMC-Snap-In IIS-bezogene Verwaltungsfeatures zur Konfiguration von ASP.NET. Weitere Informationen finden Sie unter Exemplarische Vorgehensweise: Konfigurieren von ASP.NET-Anwendungen in IIS 6.0 mit MMC.
In IIS 7.0 ist die Verwaltung von ASP.NET-Anwendungen stärker in die IIS-Verwaltung integriert, und es gibt kein separates Snap-In. Stattdessen wird die gesamte Konfiguration von IIS und ASP.NET mithilfe von IIS-Manager durchgeführt. Da IIS 7.0-Konfigurationsinformationen auf dem .NET Framework-Konfigurationssystem basieren, enthält die Datei Web.config für eine in IIS 7.0 ausgeführte Anwendung sowohl Webserver- als auch ASP.NET-Konfigurationseinstellungen. Beispielsweise können Sie in einer Web.config-Datei für eine in IIS 7.0 ausgeführte ASP.NET-Anwendung die Standarddatei angeben, die zurückgegeben wird, wenn ein Browser keine bestimmte Datei anfordert. (In IIS 6.0 und vorherigen Versionen von IIS war diese Einstellung in der IIS-Metabasis gespeichert.)
Bearbeiten von Web.config-Dateien
Eine Web.config-Datei für eine in IIS 7.0 ausgeführte Webanwendung kann auf folgende Arten geändert werden:
Direktes Bearbeiten der Datei Web.config mit Visual Studio, Visual Web Developer oder einem Textverarbeitungsprogramm.
Die Verwendung von IIS-Manager. Weitere Informationen finden Sie unter Internet Information Services (IIS) Manager.
Die Verwendung des ASP.NET-Websiteverwaltungs-Tools. Weitere Informationen finden Sie unter ASP.NET-Websiteverwaltungs-Tool.
Hinweis: Im Websiteverwaltungs-Tool vorgenommene Änderungen haben keine Auswirkung auf untergeordnete Konfigurationselemente des system.webServer-Elements.
Die Verwendung des IIS 7.0-Befehlszeilentools (Appcmd.exe). Dieses Dienstprogramm ermöglicht das Festlegen von IIS-Konfigurationseinstellungen und Konfigurationseinstellungen für Webanwendungen über die Befehlszeile. Weitere Informationen finden Sie unter IIS 7.0 Command-Line Tool.
Der Abschnitt system.webServer
Im Konfigurationsabschnitt system.webServer der Datei Web.config werden IIS 7.0-Einstellungen festgelegt, die auf die Webanwendung angewendet werden. Der Abschnitt system.WebServer ist ein untergeordnetes Element des configuration-Elements. Weitere Informationen finden Sie unter IIS 7.0: system.webServer Section Group (IIS Settings Schema).
Für Webservereinstellungen, die in der Konfigurationsgruppe system.WebServer festgelegt werden können, gibt es folgende Beispiele:
Das Standarddokument, das vom Webserver an einen Client zurückgegeben wird, wenn die Anforderung keine bestimmte Ressource enthält (defaultDocument-Element).
Die Komprimierungseinstellungen für Antworten (httpCompression-Element).
Benutzerdefinierte Header (customHeaders-Element des Abschnitts httpProtocol).
Module (modules-Element).
Handler (handlers-Element).
Einige Einstellungen werden nur für den integrierten Modus von IIS 7.0 angewendet und gelten nicht für den klassischen Modus. Wenn die Anwendung im klassischen Modus ausgeführt wird, werden beispielsweise im Abschnitt system.WebServer der Datei Web.config angegebene Module mit verwaltetem Code sowie Handler ignoriert. Stattdessen müssen Module mit verwaltetem Code sowie Handler wie bei früheren Versionen von IIS mit den Elementen httpModules und httpHandlers des Abschnitts system.web definiert werden.
Beispiele für die Verwendung des Konfigurationsabschnitts system.webServer finden Sie unter Gewusst wie: Konfigurieren des <system.webServer>-Abschnitts für IIS 7.0.
Verschieben einer Webanwendung zum klassischen Modus
Normalerweise muss beim Verschieben einer Webanwendung von IIS 6.0 zum klassischen Modus von IIS 7.0 die Anwendung lediglich in einem Anwendungspool abgelegt werden, der im klassischen Modus ausgeführt wird. Wenn Sie beispielsweise IIS 7.0 mit installieren, ist der Webserver in der Standardeinstellung für den Betrieb im integrierten Modus konfiguriert. Er ist außerdem für die Ausführung im Standardanwendungspool mit dem Namen DefaultAppPool konfiguriert. Um eine Webanwendung im klassischen Modus auszuführen, erstellen Sie mithilfe der Anwendung Classic.NETAppPool einen neuen Anwendungspool, der für die Ausführung im klassischen Modus konfiguriert ist. Informationen zum Erstellen eines Anwendungspools finden Sie unter Create an Application Pool.
Benutzerdefinierte Module, die die IHttpModule-Schnittstelle in einer im klassischen Modus ausgeführten Anwendung implementieren, werden nur über die Pipelineanforderungen benachrichtigt, die von der ASP.NET-Laufzeit behandelt werden. Beispielsweise werden Sie über die Anforderung einer ASPX-Seite benachrichtigt. Der Anwendungslebenszyklus ist beim klassischen Modus derselbe wie bei ASP.NET in IIS 6.0. Weitere Informationen finden Sie unter Übersicht über den Lebenszyklus von ASP.NET-Anwendungen für IIS 5.0 und 6.0.
Wenn eine im klassischen Modus ausgeführte Anwendung einen Handler enthält, der für die Behandlung einer benutzerdefinierten Erweiterung in IIS eine Skriptzuordnung benötigt, muss der Handler sowohl in der httpHandler-Gruppe als auch in der handler-Gruppe registriert werden. Die benutzerdefinierte Dateinamenerweiterung wird der ASP.NET-ISAPI-Erweiterung (Aspnet_isapi.dll) durch Festlegen des modules-Attributs und des scriptProcessor-Attributs im handler-Element zugeordnet. Diese Attribute geben an, dass das Modul für die Definition des Handlers eine ISAPI-Erweiterung ist und enthalten den Pfad dieser Erweiterung. Auf diese Weise wird von IIS 7.0 im klassischen Modus die Abwärtskompatibilität mit früheren Versionen von IIS gewährleistet. Wenn die Anwendung jedoch im integrierten Modus ausgeführt wird, müssen Sie das modules-Attribut und das scriptProcessor-Attribut entfernen. Weitere Informationen finden Sie unter Gewusst wie: Konfigurieren einer HTTP-Handlererweiterung in IIS.
Beim Verschieben einer Webanwendung von IIS 6.0 zum klassischen Modus ist nicht gewährleistet, dass diese im integrierten Modus ohne Änderungen funktioniert. Wenn Sie einen Wechsel vom klassischen in den integrierten Modus für eine Anwendung durchführen (und dafür benutzerdefinierte Module und Handler ändern), sind für die ordnungsgemäße Ausführung möglicherweise zusätzliche Änderungen erforderlich. Im nächsten Abschnitt dieses Themas wird erläutert, wie eine Anwendung zum integrierten Modus von IIS 7.0 verschoben wird.
Verschieben einer Webanwendung zum integrierten Modus
Webanwendungen, die keine benutzerdefinierten Module oder Handler beinhalten, funktionieren normalerweise ohne Änderungen im integrierten Modus von IIS 7.0. Bei Webanwendungen, die auf benutzerdefinierte Module oder Handler zurückgreifen, sind folgende Schritte für die Ausführung im integrierten Modus erforderlich:
Registrieren Sie benutzerdefinierte Module und Handler im Abschnitt system.webServer der Datei Web.config mithilfe einer der Methoden, die im Abschnitt Migrieren einer Web.config-Datei zum integrierten Modus weiter unten in diesem Thema beschrieben werden.
Definieren Sie Ereignishandler für HttpApplication-Anforderungspipelineereignisse wie BeginRequest und EndRequest nur in der Init-Methode des benutzerdefinierten Moduls.
Stellen Sie sicher, dass Sie alle Probleme berücksichtigt haben, die im Abschnitt „Known Differences Between Integrated Mode and Classic Mode“ von Upgrading ASP.NET Applications to IIS 7.0: Differences between IIS 7.0 Integrated Mode and Classic mode behandelt werden.
Module, bei denen die IHttpModule-Schnittstelle implementiert wird, werden als Module mit verwaltetem Code bezeichnet, da sie mit .NET Framework erstellt werden. Module mit verwaltetem Code können auf Serverebene oder Anwendungsebene registriert werden. Module mit systemeigenem Code sind DLLs (nicht verwalteter Code), die nur auf Serverebene registriert werden. Grundlegende ASP.NET-Features wie Sitzungszustand und Formularauthentifizierung werden im integrierten Modus als verwaltete Module implementiert.
Beim Verschieben einer Anwendung vom klassischen in den integrierten Modus können Sie die Registrierungen benutzerdefinierter Module und Handler für den klassischen Modus beibehalten oder entfernen. Wenn Sie die im klassischen Modus verwendeten httpModules- und httpHandlers-Registrierungen nicht entfernen, muss das validateIntegratedModeConfiguration-Attribut des validation-Elements auf false festgelegt werden, um Fehler zu vermeiden. Das validation-Element ist ein untergeordnetes Element des system.webServer-Elements. Weitere Informationen finden Sie im Abschnitt „Disabling the migration message“ unter ASP.NET Integration with IIS 7.0.
Migrieren einer Web.config-Datei zur Verwendung im integrierten Modus
Beim Definieren eines Moduls oder Handlers auf Anwendungsebene wird das Modul bzw. der Handler nicht automatisch aufgerufen. Dazu zählen Module oder Handler, die in einer Assembly im Ordner Bin oder als Quellcode im Ordner App_Code definiert werden und die nicht im Abschnitt system.webServer der Datei Web.config registriert sind. Damit das Modul oder der Handler die Anforderungspipeline des integrierten Modus nutzen können, müssen diese mit einer der folgenden Methoden registriert werden:
Bearbeiten Sie die Datei Web.config direkt, und fügen Sie das modules-Element oder das handlers-Element dem system.webServer-Element hinzu. Beachten Sie den Unterschied zum klassischen Modus im Elementnamen – modules verglichen mit httpModules und Handler verglichen mit httpHandlers.
Verwenden Sie IIS-Manager, um das Modul bzw. den Handler zu konfigurieren. Weitere Informationen finden Sie unter Configuring Handler Mappings in IIS 7.0 und Configuring Modules in IIS 7.0.
Verwenden Sie das IIS 7.0-Befehlszeilentool (Appcmd.exe). Weitere Informationen finden Sie unter Configure Settings for a Site, Application, Virtual Directory or URL by Using Appcmd.exe.
Klassen und Eigenschaften für das Arbeiten im integrierten Modus
Wenn Sie mit einer Anwendung im integrierten Modus von IIS 7.0 und .NET Framework ab Version 3.0 arbeiten, können Sie die folgenden Klassen und Member verwenden, die im klassischen Modus nicht verfügbar sind:
Die SubStatusCode-Eigenschaft des HttpResponse-Objekts, mit dem Sie Codes festlegen können, die bei der Konfiguration der Ablaufverfolgung von Anforderungsfehlern nützlich sind. Weitere Informationen finden Sie unter Troubleshooting Failed Requests Using Failed Request Tracing in IIS 7.0.
Die Headers-Eigenschaft des HttpResponse-Objekts, die Zugriff auf Antwortheader bietet.
Die IsPostNotification-Eigenschaft und die CurrentNotification-Eigenschaft des HttpContext-Objekts, die beim Bereitstellen von Handlern für HttpApplication-Ereignisse verwendet werden.
Die Headers-Eigenschaft und die ServerVariables-Eigenschaft des HttpRequest-Objekts, die für den Schreibzugriff aktiviert sind.
Siehe auch
Konzepte
Ausführen von Webanwendungen unter Windows Vista mit IIS 7.0 und Visual Studio