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_LOW
PRIORITY_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