Datenbankzugriff über ISAPI-Webservererweiterungen Präsentation zur Belegarbeit für Vorlesung „Datenbanken II“ Andrei Scheibner (WF97w2)
ISAPI-Webservererweiterungen
Funktionen und Datenstrukturen GetExtensionVersion HttpExtensionProc Extension Control Block (ECB) Informationen über die Client-Anfrage und die Antwort des Servers Zeiger auf Callback-Funktionen GetServerVariable ReadClient WriteClient ServerSupportFunction
Extension Control Block cbSize: DWORD; // size of this struct. dwVersion: DWORD; // version info of this spec ConnID: HCONN; // Context number not to be modified! dwHttpStatusCode: DWORD; // HTTP Status code // null terminated log info specific to this Extension DLL lpszLogData: array [0..HSE_LOG_BUFFER_LEN-1] of Char; lpszMethod: PChar; // REQUEST_METHOD lpszQueryString: PChar; // QUERY_STRING lpszPathInfo: PChar; // PATH_INFO lpszPathTranslated: PChar; // PATH_TRANSLATED cbTotalBytes: DWORD; // Total bytes indicated from client cbAvailable: DWORD; // Available number of bytes lpbData: Pointer; // pointer to cbAvailable bytes lpszContentType: PChar; // Content type of client data
HttpExtensionProc (Beispiel) function HttpExtensionProc(var ECB: TEXTENSION_CONTROL_BLOCK): DWORD; stdcall; var ResStr: string; StrLen: DWORD; begin ECB.lpszLogData:='Delphi-DLL'; ResStr:='<HTML><HEAD><TITLE>ISAPI-Hallo</TITLE></HEAD>'+ '<BODY><H1>ISAPI-Hallo!!</H1>'+ FormatDateTime('d. mmmm yyyy, hh:nn:ss',Now())+ '</BODY></HTML>';
HttpExtensionProc (Beispiel) ResStr:=Format( 'HTTP/1.0 200 OK'#13#10'Content-Type: text/html'#13#10+ 'Content-Length: %d'#13#10'Content:'#13#10#13#10'%s', [Length(ResStr), ResStr]); StrLen:=Length(ResStr); ECB.dwHTTPStatusCode:=200; ECB.WriteClient(ECB.ConnID,Pointer(ResStr),StrLen,0); HttpExtensionProc:=HSE_STATUS_SUCCESS; end;
Vorteile Nachteile Liegen in kompilierter Form vor Abarbeitung verschiedener Anfragen in Threads innerhalb eines Prozesses Status bleibt zwischen Aufrufen erhalten (abhängig vom Webserver) Nachteile Nur in Windows-Umgebung ausführbar Schlecht änderbar Höherer Entwicklungsaufwand
OLE DB und ADO Object Linking and Embedding for Databases COM-basiert ermöglicht Zugriff auf beliebige Datenbanken über einen Provider ActiveX Data Objects Frontend für OLE DB Sammlung von Objekten für den Datenbankzugriff
Datenbankzugriff mittels ADO und OLE DB
ADO-Bibliothek (Version 2.0)
Datenbankstruktur
Funktionalität der Anwendung Anmeldung/Abmeldung Suchen nach Personen, Rassen, Planeten, Raumschiffen Änderung der Einträge von Personen, Rassen, Planeten, Raumschiffen Hinzufügen von neuen Einträgen für Personen, Rassen, Planeten, Raumschiffe
Entwicklungsumgebung Borland Delphi 4.0 Laufzeitumgebung Windows NT4.0 (2000) Oracle 8.1.5 (8.1.7) Webserver OmniHTTPd 2.0 (dito, Internet Information Server 5.0) ADO 2.0 Microsoft OLE DB Provider für Oracle (dito, Oracle Provider für OLE DB) javascriptfähiger Webbrowser