Datenbankzugriff überISAPI-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 BlockcbSize: 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• 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