|
ISAPI-Anwendungen zeichnen sich
durch einen sehr speziellen Lebensablauf aus. In untenstehendem Artikel
soll erläutert werden, was für Vorgänge auf dem Webserver ablaufen, dazu speziell, wie der
Internet Information Server (IIS) mit der ISAPI Applikation interagiert.
Aufstarten des Webservers:
IIS wird durch das Programm
"inetinfo.exe" gestartet. "inetinfo.exe" startet
seinerseits den durch dll's implementierten Web Publishing Service (W3SVC)
auf. W3SVC initialisiert und lädt sogleich unter anderem installierte
ISAPI Filter,
ODBC,
Windows Sockets
usw. Während diesen Prozessen werden zugleich bis zu 14
Threads
zur späteren Benutzung erstellt.
Nach dem vollständigen Aufstarten wartet IIS auf HTTP-Requests.
Beim Eintreffen einer Anfrage, wird diese in einem der erstellten Threads
abgehandelt. Als Erstes wird der Typ der Anfrage eruiert. In den
Einstellungen des Internet Service Managers findet der Thread die
Informationen um die Anfrage weiter zu behandeln. Als einfachste Variante
könnte als Antwort an den Browser eine HTML-Seite gesendet werden. Unter
Umständen sollen aber an dieser Stelle eine oder gar mehrere
ISAPI-Anwendungen ausgeführt werden.
Nehmen wir an, es soll' eine ISAPI-dll ausgeführt werden. IIS lädt diese
ISAPI (sofern er dies noch nicht getan hat), und registriert sie. Dies
wird getan, indem die interne ISAPI-Routine "GetExtensionVersion"
aufgerufen wird. Dieser Vorgang tritt nur einmal im "Leben"
einer ISAPI auf. (Erst beim nächsten Entlade-Vorgang des IIS, wenn die
ISAPI beim nächsten, ersten Request vollständig von Neuem geladen werden
muss, kommt auch diese Routine wieder zum Einsatz.)
Und hier sind wir auch schon beim ersten Vorteil dieser Art von
Serverseitigen - Applikationen angelangt - die Geschwindigkeit bei der
Abarbeitung einer Anfrage. IIS weiss von nun an, was mit dieser Art von
Request zu tun ist, und setzt sofort die eigentlichen Vorgänge der
Applikation in Gang. Parallel eintreffende Anfragen werden in einem
eigenen Thread abgehandelt, wobei der Part mit dem
"GetExtensionVersion"- Aufruf jedesmal übersprungen werden
kann, was ein erstes Mal Zeit einspart. Aber sehen wir, was weiter
passiert... Als
nächstes wird die ISAPI-interne Routine "HttpExtensionProc"
aufgerufen. Der IIS "füttert" dabei unsere Anwendung mit
Informationen, die vom Browser des Clients übermittelt wurden. Anhand
dieser Info's wird unsere Anwendung ein Resultat generieren, und dieses
zum Browser des Clients zurück senden. Danach fällt die ISAPI in eine
Art Winterschlaf, sie wird nicht entladen, und wartet nur auf die nächste
Anfrage. Dies ist der wohl grösste Vorteil. Da die ISAPI im Speicher des
IIS wartend vor sich hinschlummert, und jederzeit bereit ist, ihre Arbeit
zu verrichten, kann wertvolle Zeit gewonnen werden. Also scheint unsere
ISAPI quasi unsterblich zu sein ? Natürlich nicht : Sobald
wir den IIS zum Beenden bitten, werden auch alle Instanzen von dll's
wieder gelöscht, bzw. aus dem Speicher entladen. Es soll sogar von Zeit
zu Zeit vorkommen , dass IIS (aus wohl nur Microsoft bekannten Gründen)
die Instanz unserer dll selbstständig killt, und diese bei der nächsten
Anfrage wieder von Anfang an zu laden wäre... |
|