So lassen sich Web-Anwendungen durch HTTP-Module erweitern

(http://www.zdnet.de/magazin/39161030/so-lassen-sich-web-anwendungen-durch-http-module-erweitern.htm)

von Tony Patton, 29. Januar 2008

HTTP-Module waren von Anfang an Bestandteil von ASP.NET. Sie ermöglichen eine einfache Verarbeitung eingehender Anfragen und ausgehender Rückmeldungen. Der folgende Artikel bietet einen Überblick über ihre Verwendung in ASP.NET-Anwendungen.

HTTP-Module ermöglichen in ASP.NET den Zugriff auf eingehenden und ausgehenden Traffic für eine Webanwendung. Sie funktionieren ähnlich wie ISAPI-Filter (Internet Server Application Programming Interface), insofern sie für sämtliche Anfragen ausgeführt werden. Sie sind in Managed Code geschrieben und vollständig in den Lebenszyklus einer ASP.NET-Anwendung integriert.

Die HTTP-Module bieten individuell ergänzbare Funktionen für ASP.NET-Anwendungen. Sie werden der Request-Pipeline hinzugefügt, bevor und nachdem der ASP.NET-HTTP-Handler aktiv wird. HTTP-Module unterscheiden sich von HTTP-Handlern. Sie werden für sämtliche Anfragen und Rückmeldungen aufgerufen, während HTTP-Handler nur in Reaktion auf bestimmte Anfragen aktiv werden.

Die Datei Global.asax, die in allen ASP.NET-Anwendungen verfügbar ist, bietet dieselbe Funktionalität wie HTTP-Module, allerdings unterscheiden sich die Implementierungen etwas. Die Datei Global.asax erfordert Code innerhalb der Anwendung, so dass diese bei Änderungen neu kompiliert werden muss. HTTP-Module hingegen sind vollständig vom Code unabhängig.

Ein sehr nützlicher Aspekt von HTTP-Modulen besteht darin, dass sie trotzt ihrer integrierbaren Architektur ohne Auswirkungen auf vorhandene Anwendungen erstellt werden können. Sie lassen sich daher auf einfache Weise einer ASP.NET-Anwendung über eine Web-Konfigurationsdatei (web.config) hinzufügen oder wieder entfernen.

Hier einige gängige Verwendungsmöglichkeiten für HTTP-Module:

HTTP-Module werden in der Datei web.config registriert. Dadurch wird das Modul mit einer Anwendung verknüpft. Wenn ASP.NET dann eine Instanz der Http-Application-Klasse für eine Anwendung erstellt, erzeugt das auch Instanzen sämtlicher Module, die für diese registriert wurden. Die Init-Methode des Moduls wird dabei aufgerufen.

Im Rahmen der Init-Methode überwacht das Modul ein oder mehrere Ereignisse des Http-Application-Objekts. Diese Ereignisse korrespondieren mit Benutzeraktionen innerhalb einer ASP.NET-Anwendung. Es gibt unter anderem die folgenden Ereignisse:

Ein HTTP-Modul kann jedes dieser Ereignisse verwenden.

So erstellt man ein HTTP-Modul

Ein eigenes HTTP-Modul kann mit Hilfe des IHttpModule-Interface erstellt werden, das sich im System.Web-Namensbereich findet. Das IHttpModule-Interface verfügt über zwei Methoden mit den folgenden C#-Signaturen:


public void Init(HttpApplication app);
public void Dispose();

Die entsprechenden VB.NET-Signaturen lauten:


Public Sub Init(app As HttpApplication)
Public Sub Dispose()

Die Init-Methode ist wichtig, denn sie wird aufgerufen, wenn das HTTP-Modul eingehende Anfragen oder ausgehende Rückmeldungen verarbeiten soll. Aufrufe von Ereignissen (aus der obigen Liste) werden in dieser Methode platziert. Fall eines der Ereignisse aus der Http-Application-Klasse verwendet wird, muss der entsprechende Code zur Ereignisbehandlung ebenfalls hinzugefügt werden. Hierzu gehören ein Delegate, die Methode, die mit dem Ereignis verknüpft ist, und so weiter.

Sobald das Modul erstellt wurde, kann es mit Hilfe des Abschnitts httpModules der Datei web.config registriert werden, wie der folgende Codeausschnitt zeigt:

Die beste Möglichkeit, sich mit der Verwendung von HTTP-Modulen vertraut zu machen, besteht darin, eines zu erstellen. HTTP-Module werden als Klassenbibliotheken erstellt. Bei Verwendung von Visual Studio wird dem Projekt ein Verweis zum System.Web-Namensbereich hinzugefügt, um Zugriff auf die erforderlichen Klassen zu haben.

Das folgende VB.NET-Beispiel demonstriert ein einfaches HTTP-Modul, das an die Ereignisse BeginRequest und EndRequest einer Benutzeranfrage gebunden ist. Der Code zeigt eine einfache Meldung im Browser an. Sie gibt an, welches Ereignis ausgelöst wurde. Die Ereignisse werden in der Init-Methode des Moduls registriert, wobei für jedes verarbeitete Ereignis eine Methode erstellt wird.

Hier der entsprechende C#-Code:

Feedback

Verwenden Sie HTTP-Module in Ihren ASP.NET-Anwendungen? Falls ja, welche Funktionen bieten sie? Bevorzugen Sie diesen Ansatz gegenüber Alternativen wie der Verwendung der Datei Global.asax? Teilen Sie Ihre Erfahrungen im Forum[1] mit.

URLs in diesem Artikel:
[1] = http://cgi.zdnet.de/forum/