Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
HTTP-Module in IIS 7 ermöglichen Entwicklern das Erweitern oder Ersetzen von IIS-Kernfunktionen. Sie können beispielsweise ein Digestauthentifizierungsmodul schreiben, das das in IIS 7 enthaltene Modul ersetzt. Obwohl einige der Funktionen, die von systemeigenen Codemodulen bereitgestellt werden, möglicherweise der Funktionalität ähneln, die zuvor mit ISAPI-Filtern verfügbar war, sind systemeigene Codemodule anders konzipiert und bieten einen viel umfangreicheren Featuresatz als ISAPI-Filter.
Anforderungen für Native-Code HTTP-Module
Hinzufügen einer exportierten Registrierungsfunktion
HTTP-Module sind zum Exportieren einer RegisterModule-Funktion erforderlich. Sie können diese Funktion exportieren, indem Sie eine Moduldefinitionsdatei (.def) für Ihr Projekt erstellen oder das Modul mithilfe der Option "/EXPORT:RegisterModule " kompilieren.
Angeben von Benachrichtigungen und Modulpriorität
Wenn Sie Ihre RegisterModule Funktion erstellen, geben Sie eine Bitmaske an, die eine Liste der Benachrichtigungen enthält, die ihr Modul auf Anforderungsebene verarbeitet (weitere Informationen finden Sie unter Request-Processing Konstanten). Ein Modul auf Anforderungsebene könnte z. B. angeben, dass es Methoden zum Verarbeiten der RQ_BEGIN_REQUEST-Benachrichtigung und der RQ_MAP_PATH nach der Benachrichtigung bereitstellt. Ebenso könnte ein Modul auf globaler Ebene angeben, dass es Methoden zum Verarbeiten der GL_APPLICATION_START und der GL_APPLICATION_STOP Benachrichtigungen bereitstellt.
Mit der RegisterModule Funktion können Sie auch die Priorität für das Modul angeben. Die verfügbaren Prioritäten sind PRIORITY_ALIAS_FIRST, , PRIORITY_ALIAS_HIGH, PRIORITY_ALIAS_MEDIUM, PRIORITY_ALIAS_LOWund PRIORITY_ALIAS_LAST. Wenn Module registriert sind, werden sie in der Reihenfolge der Prioritäts- und Konfigurationseinstellungen verarbeitet. Wenn Sie beispielsweise ein HTTP-Modul erstellen, das als Modul mit mittlerer Priorität registriert wird, wird Ihr Modul erst verarbeitet, wenn alle Module mit hoher Priorität verarbeitet wurden. Sie können Ihr Modul so konfigurieren, dass es vor anderen Modulen mit mittlerer Priorität verarbeitet wird, und Ihr Modul wird vor allen Modulen mit niedriger Priorität verarbeitet.
Hinweis
Die Reihenfolge der Prioritätsebenen wird für RQ_SEND_RESPONSE Benachrichtigungen invertiert.
Erstellung von Modulen auf Anfrageebene
Erstellen einer Modulfabrik
Module auf Anforderungsebene mit systemeigenem Code müssen eine Modulfactory bereitstellen, die eine Instanz der CHttpModule-Klasse erstellt. Die Module-Factory wird von der IHttpModuleFactory-Schnittstelle erben.
Weitere Informationen zum Erstellen einer Modulfactory finden Sie im Codebeispiel in walkthrough: Creating a Request-Level HTTP Module By Using Native Code.
Erstellen einer Von CHttpModule abgeleiteten Klasse
Die Hauptverarbeitungsfunktionalität für HTTP-Module auf Anforderungsebene wird über ein Modul bereitgestellt, das von der Basisklasse CHttpModule abgeleitet wird. Diese Klasse muss eine Callback-Methode für jede Benachrichtigung oder Post-Benachrichtigung enthalten, die in der RegisterModule Funktion aufgeführt ist. Wenn Ihr Modul beispielsweise für die RQ_AUTHENTICATE_REQUEST-Benachrichtigung und die RQ_AUTHORIZE_REQUEST nach der Benachrichtigung registriert ist, muss Ihre Klasse die Methoden OnAuthenticateRequest und OnPostAuthorizeRequest enthalten.
Zurückgeben von CHttpModule-Methoden
Wenn methoden in der Klasse die CHttpModule Verarbeitung abgeschlossen haben, muss jede Methode einen REQUEST_NOTIFICATION_STATUS Enumerationswert zurückgeben. Dieser Wert bestimmt, wie IIS die Beendigungsbedingung der Klassenmethoden behandelt. Beispielsweise informiert ein Rückgabewert von RQ_NOTIFICATION_CONTINUE IIS, die Verarbeitung der Anforderung fortzusetzen. Im Gegensatz dazu weist ein Rückgabewert von RQ_NOTIFICATION_FINISH_REQUEST IIS an, die Verarbeitung der aktuellen Anforderung einzustellen.
CHttpModule-Bereinigung
Wenn die Verarbeitung eines Moduls abgeschlossen ist, ruft IIS die CHttpModule::D ispose-Methode des Moduls auf, um die Klasse aus dem CHttpModule Arbeitsspeicher zu entfernen.
Erstellen eines Global-Level Moduls
Erstellen einer Von CGlobalModule abgeleiteten Klasse
Die Hauptverarbeitungsfunktionalität für HTTP-Module auf globaler Ebene wird über ein Modul bereitgestellt, das von der Basisklasse CGlobalModule abgeleitet wird. Diese Klasse muss eine Rückrufmethode für jede Benachrichtigung enthalten, die in der RegisterModule Funktion aufgeführt ist. Wenn Ihr Modul beispielsweise für die GL_APPLICATION_START und die GL_APPLICATION_STOP Benachrichtigungen registriert ist, muss Ihre Klasse die Methoden OnGlobalApplicationStart und OnGlobalApplicationStop enthalten.
Zurückgeben von CGlobalModule-Methoden
Wenn methoden in der Klasse die CGlobalModule Verarbeitung abgeschlossen haben, muss jede Methode einen GLOBAL_NOTIFICATION_STATUS Enumerationswert zurückgeben. Dieser Wert bestimmt, wie IIS die Beendigungsbedingung der Klassenmethoden behandelt. Beispielsweise informiert ein Rückgabewert von GL_NOTIFICATION_CONTINUE IIS, die Verarbeitung der Benachrichtigung fortzusetzen. Im Gegensatz dazu weist ein Rückgabewert von GL_NOTIFICATION_HANDLED IIS an, die Verarbeitung der aktuellen Benachrichtigung einzustellen.
CGlobalModule-Aufräumvorgang
Wenn die Verarbeitung eines Moduls abgeschlossen ist, ruft IIS die CGlobalModule::Terminate-Methode des Moduls auf. Ihr Modul sollte diese Methode verwenden, um die CGlobalModule Klasse aus dem Arbeitsspeicher zu entfernen.
Siehe auch
Exemplarische Vorgehensweise: Erstellen eines Request-Level HTTP-Moduls mithilfe von systemeigenem Code
Exemplarische Vorgehensweise: Erstellen eines Global-Level HTTP-Moduls mithilfe von systemeigenem Code
Erstellen von Native-Code-HTTP-Modulen