ISAPI – Internet Server Application Programming Interface

Webserver - Erweiterung mit Lazarus (Free Pascal) oder Delphi. ISAPI - Filter und ISAPI - Extensions sind die performanteste Möglichkeit einen Webserver wie z.B. den IIS von Microsoft im Funktionsumfang zu erweitern.

ISAPI-Diagramm
ISAPI-Diagramm

Das ISAPI (Internet Server Application Programming Interface) bietet einen eleganten und effizienten Weg zur Erweiterung der Funktionalität eines Webservers wie z.B. des IIS oder auch des Apache Webservers. Da ISAPI-Anwendungen kompiliert sind, sind sie viel schneller als ASP-Dateien oder Dateien, die COM+-Komponenten verwenden.

ISAPI-Code wird in Form einer DLL (Dynamic-link library) eingebunden und kann entweder single-threaded oder multi-threaded sein. Dieser Code wird automatisch in dem Augenblick zum Teil des Webservers, wenn eine Website gestartet wird und kann dann direkt mit den Datenstrukturen des Webservers interagieren. Hierdurch bietet es weit mehr Flexibilität als das CGI (Common Gateway Interface) welches einen separaten Prozess nutzt und hat auch nicht dessen Leistungsgrenzen. Da der einmal geladene Code im Server integriert ist und nicht immer neu geladen werden muss, ist er zudem noch sehr performant.

Haben Sie sich für ISAPI entschieden, müssen Sie entscheiden, ob Sie einen ISAPI-Filter oder eine ISAPI-Extension erstellen möchten. Filter reagieren auf Events, die im Server während jedem HTTP-Request ausgelöst werden, Extensions hingegen generieren nur Response auf einen HTTP-Request auf die entsprechende URL der ISAPI-DLL hin.

Unter Umständen stehen zwei Methoden zum Verarbeiten Ihrer ISAPI-DLLs zur Verfügung. Out-of-Prozess bedeutet, dass ein separater ISAPI - Runner den Code verarbeitet. In-Prozess bedeutet, dass der Code in den Haupt-Webserver-Prozess geladen und verarbeitet wird, was potenziell gefährlich ist, aber auch schneller! Wenn der Code einen Fehler enthält oder nicht "thread-safe" ist, kann es zum Absturz des gesamten Servers kommen.

Die Realisierung

Sie benötigen Lazarus oder Delphi, alle erforderlichen Komponenten werden im Rahmen dieses Artikels entwickelt / besprochen und stehen als Download auf der Homepage zur Verfügung. Unter Delphi existieren zwar schon Komponenten zur Erstellung von ISAPI-Extensions diese benutze ich aufgrund Ihrer Komplexität sehr ungern.

Um eine möglichst universelle, aber auch nicht zu komplexe Lösung zu erstellen, hat es sich bei meiner Tätigkeit als Entwickler bewährt, ein Konzept bezüglich einer Schnittstelle in drei Ebenen aufzuteilen:

  1. einer Interface-Datei, die lediglich die genaue Beschreibung der Schnittstelle mit deren Funktionen und Übergabeparametern enthält (das entspricht der C Header-Datei in diesem Fall httpext.h und httpfilt.h).
  2. einer Klassen-Datei, die dem Entwickler ein einfaches Zugreifen auf alle Eigenschaften und Funktionen der Interface-Datei ermöglicht (in diesem Fall werden es zwei Klassen-Dateien, eine mit den Klassen des Filters und die andere mit den Klassen der Extension).
  3. einer Projekt-Datei mit der abgeleiteten Klasse, aus der Klassen-Datei und der Implementierung des Beispiels (in diesem Fall natürlich auch ein Beispiel zu jeder Klassen-Datei).

Kontakt

Udo Schmal
Udo Schmal

Udo Schmal
Softwareentwickler
Ellerndiek 26
24837 Schleswig
Schleswig-Holstein
Germany




+49 4621 9785538
+49 1575 0663676
+49 4621 9785539
SMS
WhatsApp

Google Maps Profile
Instagram Profile
vCard 2.1, vCard 3.0, vCard 4.0

Service Infos

CMS Info

Product Name:
UDOs Webserver
Version:
0.5.1.217
Description:
All in one Webserver
Copyright:
Udo Schmal
Compilation:
Sun, 10. Nov 2024 00:22:34

Development Info

Compiler:
Free Pascal FPC 3.3.1
compiled for:
OS:Linux, CPU:x86_64

System Info

OS:
Ubuntu 22.04.5 LTS (Jammy Jellyfish)

Hardware Info

Model:
Hewlett-Packard HP Pavilion dm4 Notebook PC
CPU Name:
Intel(R) Core(TM) i5-2430M CPU @ 2.40GHz
CPU Type:
x86_64, 1 physical CPU(s), 2 Core(s), 4 logical CPU(s),  MHz