Freigeben über


Entwerfen von Native-Code HTTP-Modulen

HTTP-Module in IIS 7 ermöglichen Es Entwicklern, iis-Kernfunktionen zu erweitern oder zu ersetzen. Sie können beispielsweise ein Digestauthentifizierungsmodul schreiben, das das in IIS 7 enthaltene Modul ersetzt. Obwohl einige der Funktionen, die von Modulen mit nativem Code bereitgestellt werden, funktionen ähneln können, die zuvor mit ISAPI-Filtern verfügbar waren, sind Module mit nativem Code 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 erforderlich, um eine RegisterModule-Funktion zu exportieren. Sie können diese Funktion exportieren, indem Sie eine Moduldefinitionsdatei (DEF) für Ihr Projekt erstellen, oder Sie können das Modul mithilfe des Schalters /EXPORT:RegisterModule kompilieren.

Angeben von Benachrichtigungen und Modulpriorität

Wenn Sie Ihre RegisterModule Funktion erstellen, geben Sie eine Bitmaske an, die eine Liste von Benachrichtigungen enthält, die ihr Modul auf Anforderungsebene verarbeitet (weitere Informationen finden Sie unter Anforderungsverarbeitungskonstanten). Ein Modul auf Anforderungsebene könnte beispielsweise 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 RegisterModule der 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_LOWPRIORITY_ALIAS_MEDIUM, und PRIORITY_ALIAS_LAST. Wenn Module registriert werden, werden sie in der Reihenfolge der Prioritäts- und Konfigurationseinstellungen verarbeitet. Wenn Sie beispielsweise ein HTTP-Modul erstellen, das sich als Modul mit mittlerer Priorität registriert, 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ätsstufen wird für RQ_SEND_RESPONSE Benachrichtigungen umgekehrt.

Erstellen von Request-Level Modulen

Erstellen einer Modulfactory

Module auf Anforderungsebene auf Nativem Code müssen eine Modulfactory bereitstellen, die eine instance der CHttpModule-Klasse erstellt. Die Modulfactory erbt von der IHttpModuleFactory-Schnittstelle .

Weitere Informationen zum Erstellen einer Modulfactory finden Sie im Codebeispiel unter Exemplarische Vorgehensweise: Erstellen eines Request-Level HTTP-Moduls mithilfe von nativem Code.

Erstellen einer Klasse, die von CHttpModule abgeleitet wird

Die Standard Verarbeitungsfunktionalität für HTTP-Module auf Anforderungsebene wird über ein Modul bereitgestellt, das von der Basisklasse CHttpModule abgeleitet wird. Diese Klasse muss eine Rückrufmethode für jede Benachrichtigung oder nach der 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 die Verarbeitung der Methoden in der CHttpModule Klasse abgeschlossen ist, muss jede Methode einen REQUEST_NOTIFICATION_STATUS Enumerationswert zurückgeben. Dieser Wert bestimmt, wie IIS die Beendigungsbedingung der Klassenmethoden behandelt. Beispielsweise wird IIS durch den Rückgabewert RQ_NOTIFICATION_CONTINUE darüber informiert, die Verarbeitung der Anforderung fortzusetzen. Im Gegensatz dazu weist der Rückgabewert RQ_NOTIFICATION_FINISH_REQUEST IIS an, die Verarbeitung für die aktuelle Anforderung einzustellen.

CHttpModule Cleanup

Wenn die Verarbeitung eines Moduls abgeschlossen ist, ruft IIS die CHttpModule::D ispose-Methode des Moduls auf, um die CHttpModule Klasse aus dem Arbeitsspeicher zu entfernen.

Erstellen eines Global-Level-Moduls

Erstellen einer klasse, die von CGlobalModule abgeleitet wird

Die Standard Verarbeitungsfunktionalität für HTTP-Module auf globaler Ebene wird über ein Modul bereitgestellt, das von der CGlobalModule-Basisklasse abgeleitet ist. 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 die Verarbeitung der Methoden in der CGlobalModule -Klasse abgeschlossen ist, muss jede Methode einen GLOBAL_NOTIFICATION_STATUS Enumerationswert zurückgeben. Dieser Wert bestimmt, wie IIS die Beendigungsbedingung der Klassenmethoden behandelt. Beispielsweise wird IIS durch den Rückgabewert GL_NOTIFICATION_CONTINUE darüber informiert, die Verarbeitung der Benachrichtigung fortzusetzen. Im Gegensatz dazu weist der Rückgabewert GL_NOTIFICATION_HANDLED IIS an, die Verarbeitung der aktuellen Benachrichtigung einzustellen.

CGlobalModule Cleanup

Wenn die Verarbeitung eines Moduls abgeschlossen ist, ruft IIS die CGlobalModule::Terminate-Methode des Moduls auf. Ihr Modul sollte diese Methode verwenden, um Ihre CGlobalModule Klasse aus dem Arbeitsspeicher zu entfernen.

Weitere Informationen

Exemplarische Vorgehensweise: Erstellen eines Request-Level HTTP-Moduls mithilfe von nativem Code
Exemplarische Vorgehensweise: Erstellen eines Global-Level HTTP-Moduls mithilfe von nativem Code
Erstellen von Native-Code HTTP-Modulen