Freigeben über


Exemplarische Vorgehensweise: Konfigurieren von ASP.NET-Anwendungen in IIS 7.0

Aktualisiert: November 2007

Wenn eine ASP.NET-Webanwendung von IIS 7.0 gehostet wird, gibt es mehrere Möglichkeiten, die Konfigurationseinstellungen für die Anwendung vorzunehmen. Hierzu gehören folgende Elemente:

  • Die Verwendung von IIS-Manager. Weitere Informationen finden Sie unter Gewusst wie: Öffnen des IIS-Managers und Internet Information Services (IIS) Manager.

  • Direktes Bearbeiten der Datei Web.config. Dies kann mit Visual Studio, Visual Web Developer oder durch Verwendung eines Texteditors erfolgen.

  • Verwendung des IIS 7.0-Befehlszeilentools (Appcmd.exe). Dieses Dienstprogramm ermöglicht das Festlegen von IIS-Konfigurationseinstellungen und Konfigurationseinstellungen für Webanwendungen. Weitere Informationen finden Sie unter IIS 7.0 Command-Line Tool.

  • Verwendung der Windows-Verwaltungsinstrumentation (WMI) Der IIS 7.0-WMI-Anbieternamespace WebAdministration enthält Klassen und Methoden, mit denen Sie Skripts für Administrationsaufgaben für Websites, Webanwendungen und deren zugeordnete Objekte und Eigenschaften erstellen können. Weitere Informationen finden Sie unter IIS 7.0: WMI.

IIS 7.0 hat eine modulare Architektur, durch die die Module angegeben werden können, die die Funktionen eines Webservers bestimmen. Wenn IIS 7.0 installiert wird, werden viele Module standardmäßig nicht aktiviert. Wenn Sie mit ASP.NET-Websites arbeiten, könnte die Aktivierung folgender Module nützlich sein:

  • Das Modul IIS6-Verwaltungskompatibilität ermöglicht Visual Studio, Metabaseaufrufe zur Interaktion mit dem IIS 7.0-Konfigurationsspeicher zu verwenden.

  • Das Modul Windows-Authentifizierung, das das Debuggen von Webanwendungen in Visual Studio ermöglicht.

Weitere Informationen finden Sie unter Ausführen von Webanwendungen unter Windows Vista mit IIS 7.0 und Visual Studio und Ausführen von Webanwendungen unter Windows Server 2008 mit IIS 7.0 und Visual Studio.

In dieser exemplarischen Vorgehensweise legen Sie Konfigurationseinstellungen mithilfe von IIS-Manager fest und lernen, wie sich die Einstellungen in der Datei Web.config einer Webanwendung widerspiegeln. In dieser exemplarischen Vorgehensweise werden u. a. die folgenden Aufgaben veranschaulicht:

  • Erstellen eines benutzerdefinierten Moduls mit verwaltetem Code und Einfügen des Moduls in das Verzeichnis App_Code einer Webanwendung.

  • Registrieren des benutzerdefinierten Moduls unter Verwendung von IIS-Manager.

  • Hinzufügen eines benutzerdefinierten HTTP-Headers unter Verwendung von IIS-Manager.

Die Funktionalität des Moduls ist in dieser exemplarischen Vorgehensweise nicht von Bedeutung. Stattdessen wird in dieser exemplarischen Vorgehensweise gezeigt, wie das Modul in die Anforderungspipeline integriert wird und wie sich die Konfiguration der Anwendung mit IIS-Manager auf die Datei Web.config auswirkt.

Vorbereitungsmaßnahmen

Für die Durchführung dieser exemplarischen Vorgehensweise benötigen Sie Folgendes:

  • IIS 7.0, installiert und ausgeführt unter Windows Vista oder Windows Server 2008.

  • Mindestens einen Anwendungspool, der im integrierten Modus von IIS 7.0 ausgeführt wird.

  • Das Modul IIS6-Verwaltungskompatibilität, das in IIS 7.0 aktiviert sein muss.

  • Visual Studio 2008.

  • .NET Framework Version 3.0 oder höher.

  • Administratorrechte auf Ihrem Computer.

  • Ein Tool zur Untersuchung von HTTP-Anforderungen und -Antworten zwischen Ihrem Computer und Webservern, beispielsweise das Tool Fiddler, das auf der Website Fiddler Web Debugging Proxy erhältlich ist.

    Hinweis:

    Fiddler ist ein Tool eines Drittanbieters, das nicht von Microsoft unterstützt wird.

Erstellen eines benutzerdefinierten HTTP-Moduls

Zunächst erstellen Sie eine neue Website.

So erstellen Sie eine neue Webseite

  1. Erstellen Sie in Visual Studio eine neue lokale HTTP-Website mit dem Namen WalkthroughIIS7.

    Informationen zum Erstellen einer lokalen IIS-Website finden Sie unter Exemplarische Vorgehensweise: Erstellen einer lokalen IIS-Website in Visual Web Developer.

  2. Klicken Sie im Menü Start auf Alle Programme, auf Zubehör und dann auf Ausführen.

  3. Geben Sie im Feld Öffnen den Text inetmgr ein, und klicken Sie auf OK.

    Hinweis:

    Wenn die Benutzerkontensteuerung aktiviert ist, wird beim Zugriff auf IIS-Manager möglicherweise eine Meldung angezeigt. Klicken Sie in diesem Fall auf Weiter. Weitere Informationen finden Sie unter User Account Control.

  4. Stellen Sie sicher, dass sich die Website in einem Anwendungspool befindet, der im integrierten Modus ausgeführt wird.

    Informationen zum Festlegen des Modus einer Webanwendung finden Sie unter Configure the Request-Processing Mode for an Application Pool.

Sie können nun das benutzerdefinierte HTTP-Modul erstellen.

So erstellen Sie ein benutzerdefiniertes HTTP-Modul

  1. Klicken Sie in Visual Studio im Projektmappen-Explorer mit der rechten Maustaste auf den Webprojektknoten, und klicken Sie dann auf Neues Element hinzufügen.

    Das Dialogfeld Neues Element hinzufügen wird angezeigt.

  2. Klicken Sie unter Von Visual Studio installierte Vorlagen auf Klasse.

  3. Wählen Sie die Programmiersprache, die Sie verwenden möchten.

  4. Geben Sie als Namen der Klasse CustomModule ein, und klicken Sie dann auf Hinzufügen.

    Wenn die Website noch keinen App_Code-Ordner enthält, wird eine Meldung angezeigt, in der gefragt wird, ob die Klasse im App_Code-Ordner abgelegt werden soll. Klicken Sie in diesem Fall auf Ja.

  5. Entfernen Sie in der Klassendatei den vorhandenen Code, und ersetzen Sie ihn durch den folgenden Code:

    Imports System
    Imports System.Configuration
    Imports System.Web
    Imports System.Web.Security
    Imports System.Web.UI
    
    Public Class CustomModule
        Implements IHttpModule
    
        Public Sub New()
            ' Constructor
        End Sub
    
        Public Sub Init(ByVal app As HttpApplication) Implements IHttpModule.Init
            AddHandler app.BeginRequest, AddressOf Me.BeginRequest
        End Sub
    
    
        Public Sub BeginRequest(ByVal source As Object, ByVal e As EventArgs)
            Dim app As HttpApplication = CType(source, HttpApplication)
            Dim cont As HttpContext = app.Context
            Dim notification As String = cont.CurrentNotification.ToString()
            Dim postNotification As String = cont.IsPostNotification.ToString()
            cont.Response.Headers.Set("CustomHeader2", "ASPX, Event = " & notification & _
                    ", PostNotification = " & postNotification + _
                    ", DateTime = " & DateTime.Now.ToString())
    
        End Sub
    
        Public Sub Dispose() Implements IHttpModule.Dispose
        End Sub
    End Class
    
    using System;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    
    public class CustomModule : IHttpModule
    {
        public CustomModule()
        {
            // Constructor
        }
        public void Init(HttpApplication app)
        {
            app.BeginRequest += new EventHandler(BeginRequest);
        }
        public void BeginRequest(object source, EventArgs e)
        {
    
            HttpApplication app = (HttpApplication)source;
            HttpContext cont = app.Context;
            string notification = cont.CurrentNotification.ToString();
            string postNotification = cont.IsPostNotification.ToString();
            cont.Response.Headers.Set("CustomHeader2", "ASPX, Event = " + notification +
                    ", PostNotification = " + postNotification +
                    ", DateTime = " + DateTime.Now.ToString());
    
        }
        public void Dispose()
        {
        }
    }
    

    Der Code führt folgende Schritte aus:

    • Definition eines benutzerdefinierten Moduls mit verwaltetem Code, das die IHttpModule-Schnittstelle implementiert.

    • Definition eines Ereignishandlers für das BeginRequest-Ereignis der HttpApplication-Instanz. Der Ereignishandler definiert einen benutzerdefinierten Header, der der Antwortheaderauflistung hinzugefügt wird.

    • Hinzufügen des Handlers zur Anforderungspipeline zur Benachrichtigung in der Init-Methode des Moduls.

    Da die Klasse die IHttpModule-Schnittstelle implementiert, muss die Klasse eine Init-Methode und eine Dispose-Methode implementieren. Die Dispose-Methode in diesem Modul hat keine Funktion, hier kann jedoch bei Bedarf Dispose-Logik implementiert werden.

  6. Klicken Sie im Menü Erstellen auf Website erstellen, um sicherzustellen, dass das Modul keine Fehler enthält.

Als letzte Aufgabe dieses Abschnitts erstellen Sie ASP.NET- und HTML-Seiten, mit denen Sie später in dieser exemplarischen Vorgehensweise das benutzerdefinierte Modul testen können.

So erzeugen Sie ASP.NET- und HTML-Testseiten

  1. Fügen Sie dem Stammordner der Anwendung eine neue ASP.NET-Webseite mit dem Namen ASPXpage.aspx hinzu, die nur aus einer Datei besteht.

  2. Entfernen Sie das vorhandene Markup, und ersetzen Sie es durch das folgende Markup:

    <%@ Page Language="VB" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <script >
    
    </script>
    
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head >
        <title>ASPX Module Test Page</title>
    </head>
    <body>
        <form id="form1" >
        <div>
        <%= Response.Headers.Get("CustomHeader2").ToString() %>
        </div>
        </form>
    </body>
    </html>
    
    <%@ Page Language="C#" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <script >
    
    </script>
    
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head >
        <title>ASPX Module Test Page</title>
    </head>
    <body>
        <form id="form1" >
        <div>
        <%= Response.Headers.Get("CustomHeader2").ToString() %>
        </div>
        </form>
    </body>
    </html>
    
  3. Fügen Sie dem Stammordner der Webanwendung eine neue HTML-Seite mit dem Namen HTMLPage.htm hinzu.

  4. Fügen Sie der HTML-Seite das folgende Markup hinzu.

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head>
        <title>HTML Module Test Page</title>
    </head>
    <body>
        <div>
           HTML page.
           <br />
        </div>
    </body>
    </html>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head>
        <title>HTML Module Test Page</title>
    </head>
    <body>
        <div>
           HTML page.
           <br />
        </div>
    </body>
    </html>
    
  5. Speichern Sie alle Änderungen.

  6. Führen Sie die Seiten ASPXpage.aspx und HTMLpage.htm einzeln aus, um sicherzustellen, dass sie in einem Browser angezeigt werden können.

    Hinweis:

    Lassen Sie die Visual Studio-Anwendung geöffnet. Sie verwenden diese Anwendung später noch einmal, um mit IIS-Manager vorgenommene Konfigurationsänderungen zu überprüfen.

Zu diesem Zeitpunkt werden die Seiten zwar ausgeführt, rufen jedoch das benutzerdefinierte Modul nicht auf. Im nächsten Verfahren fügen Sie das benutzerdefinierte Modul der Anforderungspipeline hinzu.

Ändern der Konfiguration unter Verwendung von IIS-Manager

In diesem Abschnitt verwenden Sie IIS-Manager, um mehrere Konfigurationseinstellungen für die IIS-Anwendung vorzunehmen. Sie registrieren das benutzerdefinierte Modul, fügen einen benutzerdefinierten Header hinzu und deaktivieren die statische Komprimierung.

So registrieren Sie das benutzerdefinierte Modul mit verwaltetem Code

  1. Klicken Sie im Menü Start auf Alle Programme, auf Zubehör und dann auf Ausführen.

  2. Geben Sie im Feld Öffnen den Text inetmgr ein, und klicken Sie auf OK.

    Hinweis:

    Wenn die Benutzerkontensteuerung aktiviert ist, wird beim Zugriff auf IIS-Manager möglicherweise eine Meldung angezeigt. Klicken Sie in diesem Fall auf Weiter. Weitere Informationen finden Sie unter User Account Control.

  3. Erweitern Sie im Bereich Verbindungen den Namen des Computers oder Servers, der die Website hostet.

  4. Erweitern Sie den Ordner Sites.

  5. Wählen Sie die Website WalkthroughIIS7 aus. Wenn die Webanwendung eine Anwendung einer Website ist, erweitern Sie unter Windows Server 2008 zunächst diese Website, und wählen Sie dann WalkthroughIIS7 aus.

    Standardmäßig werden im mittleren Bereich von IIS-Manager die Webserverkonfigurationsoptionen nach Bereich angezeigt. Für die WalkthroughIIS7-Webanwendung sind dies zwei Bereiche: ASP.NET und IIS.

  6. Doppelklicken Sie im IIS-Abschnitt des mittleren Bereichs auf das Symbol Module.

    Die Module-Detailansicht im mittleren Bereich zeigt alle Module an, die derzeit für IIS konfiguriert sind.

  7. Klicken Sie im Bereich Aktionen auf Verwaltetes Modul hinzufügen.

    Das Dialogfeld Verwaltetes Modul hinzufügen wird angezeigt.

  8. Geben Sie CustomModule in das Feld Name ein.

    Der Name kann eine beliebige Beschreibung des Moduls sein. In dieser exemplarischen Vorgehensweise verwenden Sie nur den Namen des Moduls.

  9. Wählen Sie in der Liste Typ den vollqualifizierten Namen des verwalteten Typs für das Modul aus, oder geben Sie ihn ein.

    Der Typ CustomModule wird in der Liste angezeigt, da die IIS-Konfiguration alle Klassen im Ordner App_Code einschließt, die IHttpModule implementieren.

  10. Stellen Sie sicher, dass das Kontrollkästchen Nur für ASP.NET-Anwendungen und verwaltete Handler aufrufen nicht aktiviert ist.

    In dieser exemplarischen Vorgehensweise soll das Modul für alle Anforderungen in der Pipeline aufgerufen werden, nicht nur für ASP.NET-Anforderungen.

  11. Klicken Sie auf OK.

    Das Modul mit verwaltetem Code wird der Liste von Modulen hinzugefügt. Möglicherweise müssen Sie einen Bildlauf durchführen oder die Liste erneut sortieren, um das hinzugefügte Modul zu sehen.

So fügen Sie einen benutzerdefinierten Antwortheader hinzu

  1. Klicken Sie im linken Bereich von IIS-Manager auf den Namen des WalkthroughIIS7-Knotens, um den Hauptkonfigurationsbereich für die Site anzuzeigen.

  2. Doppelklicken Sie im mittleren Bereich im Abschnitt IIS-Einstellungen auf das Symbol HTTP-Antwortheader.

    Das HTTP-Antwortheader-Featuredetail wird im mittleren Bereich angezeigt. Es zeigt alle derzeit definierten HTTP-Antwortheader an.

  3. Klicken Sie im Bereich Aktionen auf Hinzufügen.

    Das Dialogfeld Benutzerdef. HTTP-Antwortheader hinzufügen wird angezeigt.

  4. Geben Sie im Textfeld NameCustomHeader1 ein.

    Der Name kann eine beliebige Beschreibung des Headers sein.

  5. Geben Sie im Textfeld Wert den Wert SampleHeader ein.

Als nächstes deaktivieren Sie die statische Komprimierung. Dies verhindert die Komprimierung von statischem Inhalt, z. B. von HTML-Seiten.

So deaktivieren Sie die statische Komprimierung

  1. Klicken Sie im linken Bereich auf den WalkthroughIIS7-Knoten, um den Hauptkonfigurationsbereich der Site im mittleren Bereich anzuzeigen.

  2. Doppelklicken Sie im mittleren Bereich von IIS-Manager auf das Symbol Komprimierung im Abschnitt IIS-Einstellungen.

    Das Featuredetail Komprimierung wird im mittleren Bereich angezeigt.

  3. Stellen Sie sicher, dass das Kontrollkästchen Komprimierung statischer Inhalte aktivieren deaktiviert ist.

Überprüfen von Konfigurationsänderungen in Visual Studio

In dieser exemplarischen Vorgehensweise haben Sie die Konfigurationsaufgaben unter Verwendung von IIS-Manager durchgeführt. In diesem Verfahren zeigen Sie die Änderungen in der Datei Web.config der Anwendung an.

So überprüfen Sie die Modulregistrierung in der Datei Web.config

  1. Kehren Sie zur Visual Studio-Anwendung und der WalkthroughIIS7-Anwendung zurück.

  2. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Namen der Website, und klicken Sie dann auf Ordner aktualisieren.

    Damit wird die Visual Studio-Ansicht des Websiteordners mit dem Ordner und den Dateien auf dem Datenträger synchronisiert.

    Wenn die Anwendung ursprünglich keine Datei Web.config enthalten hat, befindet sich nun eine Datei Web.config in der Webanwendung. Wenn die Datei Web.config für diese Anwendung bereits vorhanden war, wurden die Änderungen an dieser Datei vorgenommen.

  3. Doppelklicken Sie im Projektmappen-Explorer auf die Datei Web.config, um ihren Inhalt anzuzeigen.

    Der Abschnitt system.webServer enthält die Konfigurationsänderungen, die Sie mithilfe von IIS-Manager vorgenommen haben. Der Abschnitt system.webServer enthält die folgenden untergeordneten Elemente:

    • Ein modules-Element, das das benutzerdefinierte Modul für die Anforderungsverarbeitungspipeline registriert.

    • Ein httpProtocol-Element, das den benutzerdefinierten Antwortheader definiert.

    • Ein urlCompression-Element, das die statische Komprimierung deaktiviert.

    Der Abschnitt system.webServer sieht wie im folgenden Beispiel aus:

    <system.webServer>
      <modules>
        <add name="CustomModule" type="CustomModule" preCondition="" />
      </modules>
      <httpProtocol>
        <customHeaders>
          <add name="CustomHeader1" value="SampleHeader" />
        </customHeaders>
      </httpProtocol>
      <urlCompression doStaticCompression="false" />
    </system.webServer>
    

    Weitere Informationen über den Abschnitt system.webServer finden Sie unter Verwenden der ASP.NET-Konfiguration und IIS 7.0: system.webServer Section Group (IIS Settings Schema).

Testen des benutzerdefinierten Moduls

IIS 7.0 verfügt über eine integrierte Anforderungspipeline. Anforderungen für alle Anwendungsressourcen (wie beispielsweise eine ASPX-Seite oder eine HTM-Seite) können Pipelinebenachrichtigungen in einem Modul mit verwaltetem Code, wie dem in dieser exemplarischen Vorgehensweise erzeugten benutzerdefinierten Modul, auslösen.

Hinweis:

Als Sie das Modul mit verwaltetem Code in IIS-Manager konfiguriert haben, haben Sie die Option Nur für ASP.NET-Anwendungen und verwaltete Handler aufrufen nicht ausgewählt. Hätten Sie diese Option ausgewählt, würde das benutzerdefinierte Modul nur Pipeline-Benachrichtigungen für ASP.NET-Ressourcen erhalten und nicht für statische Ressourcen wie HTML-Dateien.

So überprüfen Sie, ob das benutzerdefinierte Modul für alle Ressourcen angewendet wird

  1. Öffnen Sie die Seite ASPXpage.aspx in Visual Studio, und drücken Sie STRG+F5, um die Seite in einem Browser anzuzeigen.

    Der im Modul festgelegte benutzerdefinierte Header wird im Browser angezeigt. Von der ASP.NET-Seite können Sie nicht auf den von IIS erstellten benutzerdefinierten Header zugreifen, da die Headerinformationen hinzugefügt wurden, nachdem der Seiteninhalt in den Stream gerendert wurde. Sie können jedoch mit einem Tool zur Überwachung von HTTP-Datenverkehr, wie beispielsweise Fiddler, überprüfen, ob der Header festgelegt ist.

  2. Öffnen Sie das HTTP-Datenverkehrsüberwachungstool, und aktualisieren Sie die Seite ASPXpage.aspx im Browser.

    Hinweis:

    Wenn die URL der Seite ASPXpage.aspx localhost verwendet, ersetzen Sie localhost durch den Namen des Computers, auf dem IIS 7.0 installiert ist. In einem typischen Entwicklungsszenario ist dies auch der Computer, auf dem Visual Studio ausgeführt wird.

  3. Überprüfen Sie, ob CustomHeader1 und CustomHeader2 in der Headerauflistung der Antwort angezeigt werden.

  4. Zeigen Sie HTMLPage.htm in einem Browser an.

  5. Überprüfen Sie, ob CustomHeader1 und CustomHeader2 in der Headerauflistung der Antwort angezeigt werden.

Nächste Schritte

In dieser exemplarischen Vorgehensweise erhielten Sie eine Einführung in die Konfiguration von ASP.NET in IIS 7.0. Konfigurationseinstellungen für den IIS 7.0-Webserver und für ASP.NET werden in einer Konfigurationsdatei zusammengefasst, die mit einer einzigen Verwaltungsoberfläche bearbeitet werden kann.

Sie sollten sich mit weiteren Einstellungen in IIS-Manager vertraut machen und mehr darüber lernen, wie sich Änderungen in der Konfigurationsdatei widerspiegeln. Weitere Informationen finden Sie unter Internet Information Services (IIS)

Siehe auch

Aufgaben

Exemplarische Vorgehensweise: Konfigurieren von ASP.NET-Anwendungen in IIS 6.0 mit MMC

Konzepte

Verschieben einer ASP.NET-Anwendung von IIS 6.0 nach IIS 7.0

Weitere Ressourcen

Configuring Modules in IIS 7.0

Configuring HTTP Response Headers in IIS 7.0