Die dFPUG-Internetklassenbibliotheken
von Rainer Becker
Unterstützt werden von Visual FoxPro nur die Client-Betriebssysteme Windows und Windows NT Workstation in den verschiedenen Versionen. Nicht oder nicht mehr unterstützt werden wegen Veralterung oder zu geringer Marktdurchdringung die Client-Betriebssysteme Windows 3.x , OS/2, Unix und Apple MacIntosh. In Bezug auf Unix mag diese Entscheidung von Microsoft wenig verständlich sein, aber der Hersteller konzentriert sich im Bereich Softwareentwicklungsumgebungen nunmal auf sein eigenes Betriebssystem. Andere Betriebssysteme können allerdings über Internet-Browser unterstützt werden. Zu solch einem Schritt haben sich viele Firmen entschlossen - siehe z.B. die Entscheidung von SAP, nur noch Windows- und Windows NT-Frontends zu unterstützen und alle anderen Betriebssysteme über Internet-Browser-Zugriff abzudecken.
Es besteht deshalb immer häufiger die Anforderung an Visual FoxPro-Anwendungen, auch im Internet unter HTML darstellbar zu sein. Dafür ist in einer Netzwerkumgebung auf jeden Fall ein NT-Server ab Version 4.0 mit Internet Information Server Version 3.0 oder höher sowie ein Browser auf den jeweiligen Clients notwendig. Eine entsprechende Klassenbibliothek für die Programmierung einer Internet-Schnittstelle wurde von der dFPUG entwickelt und den Mitgliedern kostenlos zur Verfügung gestellt. Diese Klassenbibliothek wird in diesem Dokument beschrieben. Erhältlich ist die Bibliothek auf der Begleit-CD sowie in den Forumsbibliotheken auf dem dFPUG-Webserver unter http://www.dfpug.de/forum.
Hard- und Softwarevoraussetzungen
Für eine Internetanbindung einer Anwendung bestehen erhöhte Hardware- und Softwareanforderungen, insbesondere an den Internet-Server als Applikationsserver. Wahlweise kann dabei für eine Visual FoxPro-Anwendung eine der nachfolgenden Kombinationen von Betriebssystem, Internet-Information Server sowie Service Packs verwendet werden (IIS steht dabei für Internet Information Server):
- Windows NT 3.51 mit Service Pack 4 sowie IIS 1.0 mit Service Pack 3
- Windows NT 4.0 mit Service Pack 3 und IIS 2.0
- Windows NT 4.0 mit Service Pack 3 und IIS 3.0
Die Internetfähigkeit kann auch auf dem Betriebssystem Windows 95/98 mit dem Personal WebServer hergestellt werden. Aufgrund der geringeren Stabilität gegenüber Windows NT und der Nichteinschränkbarkeit der Zugriffsrechte wird davon aber abgeraten.
Voraussetzung für den Server ist auf jeden Fall ein höher getackteter Pentium-Prozessor mit ein Hauptspeicher mit mindestens 128 MB RAM. Sofern höhere Last auf dem Webserver erwartet wird oder weitere Prozesse laufen sollen, wird eine massive Hauptspeichererweiterung sowie ggf. ein Dual-Prozessor-System empfohlen.
Auf der Client-Seite sollte mit einem der nachfolgenden Browser gearbeitet werden:
- Microsoft Internet Explorer 4.0 oder höher
- Netscape Communicator 4.0 oder höher
Für die dFPUG-Klassenbibliotheken sind keine höheren Versionen von Browsern oder Servern erforderlich, da nur mit Standard-HTML gearbeitet wird.
Konzept der Klassen
Das Konzept der Internetanbindung der dFPUG-Klassenbibliotheken geht davon aus, daß die zu konvertierende Anwendung nicht soweit verändert werden soll, daß sie von vorneherein eigenständig im Internet lauffähig ist, sondern das für die im Internet darzustellenden Module eine eigenständige DLL erzeugt wird, welche die internetspezifische Useranmeldung und -verwaltung sowie die Darstellung von zusätzlichen HTML-Seiten übernimmt und wenn überhaupt dann erst in einer tieferen Ebene die darzustellenden Module aufruft, falls die HTML-Seiten nicht ohnehin individuell neu für das Internet erstellt werden müssen. Für die Erzeugung der oberen Ebenen werden zwei Klassen verwendet: Eine Internet-Maske und ein Internet-Button.
Die Internet-Maske ist der Kern einer eigenständigen Anwendung. Sie lädt Konfigurationsdaten aus eine INI-Datei und stellt eine Ablaufumgebung mit Standardfunktionen für die Internetdarstellung zur Verfügung. Auf diese Maske wiederum werden beliebig viele Objekte der Klasse Internet-Button plaziert, die die eigentliche Funktionalität in einer gekapselten Methode enthalten. Die Internetform übernimmt aus dem Internetaufruf die gewünschte Funktion und leitet den Aufruf mit Weitergabe der verbleibenden Parameter an den jeweils zuständigen Internet-Button weiter. Der Button verarbeitet die Anfrage wahlweise direkt oder indirekt durch Aufruf des zuständigen Moduls mit dem Parameter, die Darstellung unsichtbar vorzunehmen und den Maskenaufbau in Form eines HTML-Sttrings zurückzusenden. Dieser wird ggf. um Kopf- und Fußbereiche ergänzt und vom Button an die Internet-Form zurückgegeben. Die Internet-Form leitet den HTML-String dann weiter an den aufrufenden Internet Server oder startet im Falle eines lokalen Aufrufs (für Testzwecke) einen Browser zwecks Anzeige.
Für jede gewünschte Funktionalität (sprich: Ausgabemaske im Internet) wird ein eigener Internet-Button auf der Internet-Maske plaziert. Zwecks Vereinfachung der HTML-Ausgabe steht eine Textbausteinsammlung mit HTML-Teilkomponenten zur Verfügung, die kombiniert werden können zu der insgesamt auszugebenden HTML-Seite. Zusätzlich stehen Fertigfunktionen zum Einbinden von Rückgabewerten / Funktionsergebnissen in HTML-Texte sowie zur halbautomatischen Übersetzung erzeugter Seiten zur Verfügung.
Aufbau der Klassenbibliothek
Es werden folgende Klassen verwendet:
- Internet-Form
- Internet-Button
- Übersetzungsklasse
- Registryklasse
- Benutzerklasse
Zusätzlich werden folgende Hilfsklassen verwendet:
Desweiteren werden folgende Hilfsprogramme und Hilfsmasken verwendet:
- Startprogramm <Anwendung>_MAIN
- Prozedurdatei für CSV-Listen
- Parametererfassungsmaske GETVARP für interaktive Tests
Im nachfolgenden Abschnitt werden nur die Klassen Internet-Button und Internet-Form beschrieben. Auf Beschreibungen für die Managerklassen "Language", "Registry" und "User" sowie der Wrapper-Klasse für Dynazip wurde verzichtet, da diese Klassen nur sehr wenige Eigenschaften und Methoden haben, die fast selbsterklärend sind.
Klasse Internet-Form
Die Internet-Form ist die Basis der Internetanbindung. Pro zu erstellender Anwendung gibt es eine Instanz dieser Maske, auf der die entsprechenden Funktionsbuttons plaziert werden. Die Internet-Maske enthält von vorneherein jeweils eine Instanz der Managerklassen Language, Registry und User sowie ein Anzeigefeld für das aktuell eingestellte Cookie und den Usernamen (falls eingeloggt). Die Internet-Form-Klasse besitzt folgende Eigenschaften:
Eigenschaft
|
Beschreibung
|
aCmd[1,0]
|
Array mit aufrufbaren Internet-Buttons
|
aInit[1,0]
|
Array mit initialisierten Internet-Buttons
|
cAactivecolor
|
HTML-Farbe aktive Links aus INI-Datei
|
cAuthor
|
Autorenname für Tags, Default: <NO AUTHOR>
|
cBackcolor
|
Hintergrundfarbe für HTML-Seite aus INI-Datei
|
cbrowser
|
Browsername aus INI-Datei
|
cbrowserdir
|
Browserverzeichnis aus INI-Datei
|
ccookiename
|
Name des Cookie-Feldes in HTML-Seiten, Default: cookie
|
cdatadir
|
Verzeichnis Datendateien aus INI-Datei
|
cErrorpage
|
HTML-Textbaustein für Fehleranzeige aus INI-Datei
|
cfontface
|
Schriftart aus INI-Datei
|
chtmlback
|
Textbaustein für Zurück-Button aus INI-Datei
|
chtmldoscmd
|
Textbaustein für DOS-Command aus INI-Datei
|
chtmlerror
|
Textbaustein für Fehlermeldungsseite aus INI-Datei
|
chtmlfooter
|
Textbaustein für Seitenfuß aus INI-Datei
|
chtmlfoxcmd
|
Textbaustein für FoxPro-Command aus INI-Datei
|
chtmlheader
|
Textbaustein Seitenkopf aus INI-Datei
|
chtmlnocmd
|
Textbaustein für Meldung Befehl nicht verfügbar
|
chtmlreset
|
HTML-Resetbaustein, Default RESET
|
ckeywords
|
Keywords für Tags, Default: <NO KEYWORDS>
|
clinkcolor
|
HTML-Farbe für Links aus INI-Datei
|
clocaldir
|
lokales Verzeichnis aus INI-Datei
|
clocaldrive
|
lokales Laufwerk aus INI-Datei
|
clogfile
|
Name der Protokolldatei aus INI-Datei
|
cmaininifile
|
hardcodierter Pfad zur INI-Datei (Änderung!)
|
colddir
|
Vermerk Startverzeichnis
|
Cookie
|
Aktives Cookie für aktuellen Anwender
|
cpictdir
|
Bilderverzeichnis aus INI-Datei
|
creturn
|
Rückgabewert, ggf. verwendet für Fehlermeldung
|
crootdir
|
Rootverzeichnis für Webserver aus INI-Datei
|
cscriptdir
|
Verzeichnis für Skripte aus INI-Datei
|
csitehref
|
URL der Site aus INI-Datei, wichtig!
|
csprache
|
Defaultsprache für Anzeige, Default: d
|
csubtitle
|
Untertitel für HTML-Seite aus INI-Datei
|
csysdatadir
|
Verzeichnis Systemdateien aus INI-Datei
|
ctempdir
|
Temporäres Arbeitsverzeichnis aus INI-Datei
|
ctextcolor
|
HTML-Textfarbe aus INI-Datei
|
ctitle
|
Titel für HTML-Seite aus INI-Datei
|
ctrenn
|
Parametertrennzeichen aus INI-Datei, Default: ***
|
cvisitedcolor
|
HTML-Farbe für besuchte Links aus INI-Datei
|
DataSession
|
Einstellung private Datasession (2) für Mehrfachaufruf
|
Dbfalias
|
Alias der Haupttabelle
|
Dbfname
|
Name der Haupttabelle
|
dbforder
|
Sortierung der Haupttabelle
|
Inifile
|
Hilfseigenschaft für Pfad zusätzliche INI-Datei
|
Ldebug
|
Flag für Testmodus
|
lentwicklung
|
Flag für Entwicklungsmodus
|
llog
|
Flag für Mitschreiben eines Aufrufprotokolls
|
llogini
|
Schalter für Protokollieren der Initialisierung
|
lnodll
|
Flag für lokalen Aufruf der Anwendung
|
ltest
|
Doppeltes Flag für Testmodus
|
nfontsize
|
Fontgröße für HTML-Seiten aus INI-Datei
|
nlifetime
|
User-Lifetime gemäß INI-Datei, Default: 3600
|
npwdlen
|
Minimale Passwortlänge aus INI-Datei
|
ShowWindow
|
Einstellung Top-Level-Form (2)
|
Die Internet-Form-Klasse besitzt folgende Methoden:
Methode
|
Beschreibung
|
Addtoinit
|
Addieren eines Buttons zum Init-Array
|
Cleanup
|
Aufräumen der Umgebung
|
Cmd
|
Eigentliche Ausführungsmethode
|
Dobrowser
|
Aufruf des Browsers im interaktiven Modus
|
Docmd
|
Aufrufen einer Cmd-Methode eines Buttons
|
Dosave
|
Speichern von Änderungen
|
Doskip
|
Ausführen einer Datensatzbewegung
|
Fixurl
|
Entfernen ungültiger Zeichen aus Parametern
|
Genhtml
|
HTML-Seite generieren
|
Getcmd
|
Laden eines einzelnen Parameters
|
Getcookie
|
Extrahieren des Cookies aus Parametern
|
Getval
|
Parsen von Parametern
|
Initcmd
|
Initialisieren vorhandener Internet-Buttons
|
Log
|
Eintragen eines Aufrufs in Logdatei
|
Logini
|
Startvorgang in Logdatei protokollieren
|
Makecookie
|
Neues Cookie erzeugen
|
Noamper
|
Entfernen von Ampersand aus Strings
|
Setcolor
|
Setzen der globalen Farbeinstellungen aus INI-Datei
|
Setcookie
|
Setzen des aktuellen Cookies
|
Setdbf
|
Setzen einer Tabelle
|
Setdir
|
Setzen der Directories aus INI-Datei
|
Setenv
|
Setzen von Umgebungseinstellungen
|
Setini
|
Setzen der zu verwendenden INI-Datei
|
Setinstance
|
Setzen eines Instanzenlevels in DLL
|
Setkey
|
Setzen eines Keys
|
Setprop
|
Setzen einer Eigenschaft
|
Skipit
|
Skippen in Tabelle
|
Startup
|
Called from HTML Browser to start HTML
|
Writecookieinfo
|
Cookie in COOKIE.DBF wegschreiben
|
Writefile
|
Schreiben einer Low-Level-Datei
|
Notwendig ist leider für jede Installation die Anpassung des Pfades der INI-Datei an den aktuellen Webserver.
Klasse Internet-Button
Die Klasse Internet-Button wird für jede Funktion einmal auf der Internet-Form plaziert in Form einer projektspezifischen Subklasse. Aus dem Internet kann die jeweilige Funktion aufgerufen werden und liefert dann eine generierte HTML-Seite zurück. In der generierten Seite sind dann wieder Aufrufmöglichkeiten für weitere Funktionen. Die Buttons können auf der Maske optisch ähnlich der gewünschten Aufruf-Hierarchie plaziert werden. Die Internet-Button-Klasse besitzt folgende Eigenschaften, die von der Internet-Form-Klasse übernommen werden. Beschreibung siehe dort:
Eigenschaft
|
Eigenschaft
|
Chtmlfooter
|
Chtmlheader
|
Chtmlerror
|
Chtmlback
|
Chtmldoscmd
|
Chtmlfoxcmd
|
Ctextcolor
|
Clinkcolor
|
Cvisitedcolor
|
Cactivecolor
|
Cbackcolor
|
Cpictdir
|
Cfontface
|
Nfontsize
|
Ldebug
|
Llog
|
Lentwicklung
|
Ctitle
|
Csubtitle
|
Cauthor
|
Ckeywords
|
Cdatadir
|
Ctempdir
|
Csysdatadir
|
Crootdir
|
Ctrenn
|
Sofern diese Eigenschaften nicht mit einem Wert gefüllt / überschrieben wurden, wird in der Initialisierung der Wert aus der Internet-Form übernommen. Im Normalfall braucht man also keine dieser Eigenschaften anzufassen - außer man möchte ein bestimmtes abweichendes Verhalten für einen bestimmten Fall realisieren. Die Internet-Button-Klasse besitzt darüberhinaus folgende zusätzliche eigene Eigenschaften:
Eigenschaft
|
Beschreibung
|
aresults[1,2]
|
Ergebnisarray mit Platzhaltern und Rückgabewerten
|
caddfiles
|
Liste der anzuhängenden Dateien bei Download
|
ccmd
|
Befehlswort des Buttons
|
ccmdtype
|
Type des Befehls
|
cdefaultpage
|
Default-HTML-Seite für diesen Button
|
cpardiv
|
CSV-Liste mit Parameterbezeichnungen
|
ctablelist
|
Liste der benötigten Tabellen für Funktion
|
liscmd
|
Flag für aktiven Internet-Button
|
nparmax
|
Maximalanzahl übergebener Parameter
|
nparmin
|
Mindestanzahl übergebener Parameter
|
Diese Eigenschaften wiederum sollten für jeden Internet-Button gefüllt oder zumindest betrachtet werden.
Die Internet-Button-Klasse besitzt folgende Methoden, die zum Teil allerdings einfach nur eine entsprechende Methode der Internet-Form aufrufen:
Methode
|
Beschreibung
|
addresults
|
Einfügen Ergebnis in Webseite
|
cmd
|
Hauptbefehlsmethode
|
convpath
|
Konvertierung Pfad aus Sicht Webserver
|
docmd
|
Ausführen der eigentlichen Seitenfunktion
|
docmdwrap
|
Wrapper-Methode für interaktiven Aufruf
|
dologin
|
Login-Maske aufrufen
|
Getaddfilelist
|
Dateiliste aus ADD.DBF laden
|
getcmdpar
|
Parameter laden
|
Gethtml
|
Laden Textbaustein aus HTML.DBF
|
getpage
|
Laden aller Textbausteine einer Seite
|
getparsedpar
|
Geparste Parameter laden
|
getuser
|
User von Userobjekt holen
|
Getval
|
Wert laden
|
Log
|
Eintrag in Logdatei
|
noamper
|
Entfernen Ampersand aus Parameter
|
opentables
|
Öffnen benötigter Tabellen
|
preparepage
|
Vorbereitung einer Webseite
|
setcolor
|
Setzen Farbeinstellungen aus INI-Datei
|
setdir
|
Setzen der Verzeichnisse aus INI-Datei
|
sethtml
|
Setzen HTML-Parameter aus INI-Datei
|
Setprop
|
Eigenschaft setzen
|
translatepage
|
Übersetzung einer Webseite
|
zipit
|
Aufruf Komprimiermethode
|
Nur in der Methode "cmd" muß man tatsächlich programmieren. Diese Methode wird aufgerufen, wenn die Buttonfunktion aus dem Internet angefordert wurde. Über GetParsedPar holt man sich dann die benötigten Parameter
Beispiele Internet-Button
Von den Internet-Buttons stehen folgende fertige Varianten als Beispiel zur Verfügung:
Button
|
Bezeichnung
|
Name
|
Textbausteine
|
Changed
|
Meldung geändert
|
EXPW
|
NODATA
|
DOSCmd
|
Ausführung DOS-Befehl
|
DOSCMD
|
DOSCMD
|
Fehlerform
|
Rückmeldemaske
|
FEHL
|
FEHL
|
FOXCmd
|
Ausführung eines FoxPro-Befehls
|
FOXCMD
|
FOXCMD
|
Haupmenue
|
Hauptmenü
|
MENU
|
MENU,MAIL,INF
|
Ini-File
|
Anzeige INI-Datei
|
INI
|
INI
|
Login
|
Login-Maske
|
LOGIN
|
LOGIN
|
Parameter
|
Parameteranzeige
|
PARA
|
PARA
|
Passwort
|
Passwort ändern
|
CHPW
|
CHPW
|
Reset
|
Server beenden
|
RESET
|
RESET
|
Programmablauf
Aufruf einer Defaultseite aus dem Internet
Im Internet Information Server wird eine Defaultseite eingerichtet. Diese Defaultseite startet über einen Button den OLE-Server mit der Startmaske mit folgender URL:
- http://
- <<Name des Webservers>>/
- scripts/foxisapi.dll/
- oleserver
- .oleklasse
- .Methode
- ?Parameter1=Wert
- $Parameter2=Wert
Im Internet-Browser wird zusätzlich zu der URL der Aufruf auf die FOXISAPI.DLL übergeben. Diese wiederum erhält als Parameter den Namen, das Objekt und die Methode des OLE-Servers übergeben. Diesem wiederum können weitere Parameter übergeben werden. Die Größe des Parameterbuffers ist dabei allerdings beschränkt und von der jeweiligen Version der FOXISAPI.DLL abhängig..
Testmöglichkeiten und lokaler Aufruf
Erstellte Anwendungen lassen sich auf zwei Arten testen. Zum einen interaktiv aus der Entwicklungsumgebung mit Eingabe der zu übergebenden Parameter für die aktuell zu testende Funktion über eine Parametererfassungsmaske und den Aufruf des lokalen Browsers zur Anzeige der Ausgabe der erzeugten HTML-Seiten. Zum anderen über den Internet Information Server in der Form, wie die Anwendung letztendlich auch beim Anwender auf einem Webserver laufen würde. Die letztere Vorgehensweise erfordert bei Auftreten eines Fehlers aber das Beenden des IIS-Tasks (mit Hilfe von KILL.EXE) und das Neustarten des Internet-Servers. Da für jeden Testlauf die DLLs aus dem Speicher entfernt und dann wiederim Script- Verzeichnis des Webservers installiert werden müssen, ist für die ersten Tests der direkte Aufruf wahrscheinlich effizienter.
Beim lokalen Aufruf ohne das Durchschleifen des Aufrufs durch den Internet Information Server kann allerdings immer nur eine einzelne Aktion aufgerufen und deren Rückgabe im lokalen Browser angezeigt werden. Weiterführende Funktionsaufrufe können nur wieder in der in diesem Fall sichtbaren Internet-Form durch Klicken auf den jeweiligen Button ausgelöst werden. Sofern die gewünschte Funktion Parameter erwartet, wird eine entsprechende Eingabemaske für Parameter geöffnet. Der Aufruf wird von der Internet-Maske an die normale Befehlsfunktion des Buttons weitergeleitet. Der Rückgabestring wird von der Maske aber als temporäre HTML-Datei auf der Festplatte gespeichert und der Pfad auf diese neu kreierte Datei an den lokalen Browser zur Anzeige übergeben. Bei Progammende werden alle erzeugten temporären Dateien gelöscht.
Unterstützt wird das Testen der Anwendung ansonsten durch eine Aufrufprotokolldatei sowie eine Initialisierungslogdatei. Desweiteren lassen sich zur Laufzeit die INI-Daten und Parameter der Anwendung anzeigen.
Datenzugriff/Datenhaltung
Folgende Tabellen werden zur Datenhaltung verwendet:
- Textbausteine
- Benutzerverwaltung
- Cookieverwaltung
- Übersetzungstabelle
- Parametertabelle
- Zusatzdateientabelle
Die Namen der Tabellen lauten wie folgt:
Tabelle
|
Beschreibung
|
ADD.DBF
|
Zusätzlich einzupackende Dateien je nach Anwendung
|
COOKIES.DBF
|
Cookie-Zähler für aktive User
|
HTML.DBF
|
HTML-Fertigseiten oder Bausteine
|
HTMLERRO.DBF
|
HTML-Fehlerseite zum Includen in Projektdatei
|
SPRACHE.DBF
|
Übersetzungstabelle
|
SYSDB.DBF
|
Systemparameter
|
USERS.DBF
|
Benuzterverwaltung
|
Die Struktur der Tabellen wird in den nachfolgenden Abschnitten erläutert.
Dateistruktur SPRACHE.DBF
Die Tabelle wird zur Übersetzung von HTML-Textbausteinen verwendet. Die Tabelle hat folgende Struktur:
Feld
|
Feld Name
|
Inhalt
|
Typ
|
Breite
|
1
|
D
|
Kurztext Deutsch
|
Character
|
50
|
2
|
E
|
Kurztext Englisch
|
Character
|
50
|
3
|
F
|
Kurztext Franz.
|
Character
|
50
|
4
|
S
|
Kurztext Spanisch
|
Character
|
50
|
5
|
P
|
Kurztext Port.
|
Character
|
50
|
6
|
D_MEMO
|
Langtext Deutsch
|
Memo
|
4
|
7
|
E_MEMO
|
Langtext Englisch
|
Memo
|
4
|
8
|
F_MEMO
|
Langtext Franz.
|
Memo
|
4
|
9
|
S_MEMO
|
Langtext Spanisch
|
Memo
|
4
|
10
|
P_MEMO
|
Langtext Port.
|
Memo
|
4
|
11
|
DATUM
|
Datum Änderung
|
DateTime
|
8
|
Die Struktur der Tabelle kann auf die gewünschten Sprachkombinationen angepaßt werden. Allerdings ist dann auch gleichzeitig die Klasse "Language" anzupassen, die die übersetzten Strings zurückliefert.
Dateistruktur COOKIES.DBF
Für jeden Anwender wird beim ersten Einloggen in den Webserver eine Zufallskennung erzeugt und in einer Tabelle verwaltet. Dabei wird jeweils Datum/Uhrzeit der letzten Aktivität vermerkt sowie eine Aufräumliste geführt, welche Vorgänge nach dem Ausloggen des Users auszuführen sind, damit das System wieder sauber ist. Die Tabelle hat folgende Struktur:
Feld
|
Feld Name
|
Inhalt
|
Typ
|
1
|
COOKIE
|
Eindeutige Kennung
|
Character
|
2
|
RNU
|
Satznummer Datei
|
Integer
|
3
|
USER
|
Benutzername
|
Character
|
4
|
PASSWORT
|
Benutzerpasswort
|
Character
|
5
|
DATUM
|
Datum Aktivität
|
DateTime
|
6
|
SPRACHE
|
Sprachkennzeichen
|
Character
|
7
|
ACTIONS
|
Aufräummerkfeld
|
Memo
|
Ganz besonders wichtig sind bei dieser Tabelle die Felder DATUM und ACTIONS. Gemäß Eintrag in der INI-Konfigurationsdatei wird ein Anwender nach einer längerer Periode der Inaktivität automatisch ausgeloggt. Diese Zeitspanne wird ab DATUM berechnet. Bei jedem neuen Zugriff eines Anwenders wird die Tabelle gescannt und alle veralteten Anwender aus dem System ausgeloggt. Dabei wird das Memofeld ACTIONS abgearbeitet. Dieses enthält für jede Aktion eine Zeile, die als Makro abgearbeitet wird. Wenn z.B. Downloaddateien im TEMP-Verzeichnis für den User zum Download bereitgestellt wurden, wird in diesem
Memofeld gleichzeit ein Eintrag "DELETE FILE TEMP\<Dateiname.TMP>" angelegt und beim Ausloggen dann abgearbeitet.
Dateistruktur ADD.DBF
Bei Downloadangeboten sollen häufig weitere Dateien gleich miteingepackt werden, z.B. allgemeine Informationen. Alle in dieser Tabelle aufgeführten Dateien werden bei einem Einpackvorgang für das Angebot "APP" mit komprimiert. Die Tabelle hat folgende Struktur:
Feld
|
Feld Name
|
Inhalt
|
Typ
|
Breite
|
1
|
APP
|
Name des Moduls
|
Character
|
10
|
2
|
DATEI
|
Name der Datei
|
Character
|
12
|
3
|
AKTIV
|
Flag Eintrag Gültig
|
Character
|
1
|
4
|
PFAD
|
Pfad der Datei
|
Memo
|
4
|
5
|
NOTIZ
|
Notiz zur Datei
|
Character
|
40
|
Die Dynazip-Klasse zum Komprimieren von Downloadangeboten ist separat dokumentiert. Ohne die Installation der Dynazip-Klassenbibliotheken ist das Öffnen der entsprechenden Klasse/Maske leider nicht möglich.
Dateistruktur SYSDB.DBF
Die SYSDBF enthält Schalter und Defaultwerte. Diese sind derzeit allerdings noch alle in der INI-Datei gespeichert. Die Tabelle hat folgende Struktur:
Feld
|
Feld Name
|
Inhalt
|
Typ
|
Breite
|
1
|
Language
|
Sprachkennzeichen |
Character
|
1
|
Bisher wird hier also nur die Defaultsprache der Anwendung verwaltet.
Dateistruktur USERS.DBF
Die Tabelle dient zur Verwaltung des Zugriffsschutzes auf ggf. sensitive Bereiche des Webserver, z.B. für den Zugriff auf private Download-Bereiche. Die Tabelle hat folgende Struktur:
Feld
|
Feld Name
|
Inhalt
|
Typ
|
Breite
|
1
|
NUMMER
|
Benutzernummer |
Character
|
12
|
2
|
AKTIV
|
Aktiv-Flag
|
Logisch
|
1
|
3
|
USER
|
Benutzername |
Character
|
15
|
4
|
PASSWORT
|
Passwort
|
Character
|
8
|
5
|
STAND
|
Datum Stand
|
Datum
|
8
|
Dateistruktur HTMLERRO.DBF
Die Tabelle enthält einen einzigen HTML-Textbaustein mit einer Fehlermeldung. Die Tabelle hat folgende Struktur:
Feld
|
Feld Name
|
Inhalt
|
Typ
|
Breite
|
1
|
TYPE
|
Code Textbaustein
|
Character
|
20
|
2
|
HTML
|
HTML-Seite
|
Memo
|
4
|
3
|
APP
|
Applikation
|
Character
|
10
|
Diese Tabelle wird in die Projektdatei integriert und ausgegeben, sofern ein HTML-Textbaustein nicht gefunden werden kann.
Dateistruktur HTML.DBF
Die Tabelle enthält HTML-Textbausteine zwecks vereinfachtem Zusammenbau von Webseiten. Die Tabelle hat folgende Struktur:
Feld
|
Feld Name
|
Inhalt
|
Typ
|
Breite
|
1
|
TYPE
|
Code Textbaustein |
Character
|
20
|
2
|
HTML
|
HTML-Seite
|
Memo
|
4
|
3
|
APP
|
Applikation
|
Character
|
10
|
4
|
COUNTER
|
Anzahl Aufruf |
Double
|
8
|
5
|
COMMAND
|
Funktionsbereich |
Character
|
10
|
6
|
FROMDATE
|
Aufrufe seit Datum
|
DateTime
|
8
|
7
|
TODATE
|
Aufrufe bis Datum
|
DateTime
|
8
|
8
|
NOTIZ
|
Anmerkungen |
Memo
|
4
|
Textbausteine in HTML.DBF
Folgende Textbausteine stehen derzeit in der Tabelle HTML zur Verfügung:
Textbaustein
|
Inhalt
|
BACK
|
Zurück-Button
|
CHPW
|
Standardmaske Passwortänderung
|
COOKIE
|
Interner Baustein für Cookie
|
DOSCMD
|
Meldung: Ergebnis DOS-Befehlsaufruf
|
ERROR
|
Meldung: Fehlermeldung
|
EXCL
|
Meldung: Dateien nicht exklusiv verfügbar
|
FEHL
|
Standardmaske User-Feeback
|
FOOT
|
Seitenfuß
|
FOXCMD
|
Meldung: Ergebnis FoxPro-Befehlsaufru
|
HEAD
|
Seitenkopf
|
INFO
|
Vorschlag Untermenü INI/Parameter
|
INI
|
Standardmaske INI-Datei-Anzeige
|
LOAD
|
Meldung: Downloadbutton
|
MAIL
|
Standardmaske Mailversand
|
MENU
|
Vorschlag Hauptmenü
|
META
|
Baustein Meta-Tags in Seitenkopf
|
NOCMD
|
Meldung: Funktion nicht verfügbar
|
NODATA
|
Meldung: Keine Daten vorhanden
|
NOLOGI
|
Meldung: Login fehlgeschlagen
|
NOPWD
|
Meldung: Kein Passwort eingegeben
|
NOUSER
|
Meldung: Kein Username eingegeben
|
NOUSPW
|
Meldung: Weder User noch Passwort eingegeben
|
PARA
|
Standardmaske Parameteranzeige
|
POPUP
|
Meldung: Auswahlpopup
|
PWDIDE
|
Meldung: Passwort nicht geändert
|
PWDLEN
|
Meldung: Passwortlänge falsch
|
PWDSUC
|
Meldung: Passwortänderung erfolgreich
|
PWDUNE
|
Meldung: Passwort alt/neu identisch
|
REINDEX
|
Meldung: Datenbanken reindiziert
|
RESET
|
Meldung: Server wird heruntergefahren
|
RESULT
|
Platzhalter Abfrageergebnis
|
Konfigurationsdatei
Die Klassenbibliotheken werden über eine INI-Datei konfiguriert. Folgende Schalter stehen zur Verfügung:
- Allgemeine Schalter
- Schalter für Entwickler
- Farbeinstellungen
- Schrifteinstellungen
- Lokale Konfiguration
- Serverkonfiguration
Die Abschnitte der INI-Datei werden in den nachfolgenden Absätzen erläutert.
Allgemeine Schalter
Sektionsbezeichnung: [MAIN]
Eintrag
|
Inhalt
|
Beschreibung
|
Author=
|
Name des Autors
|
Autor der
Anwendung
|
Keywords=
|
VFP
|
Stichworte
|
SiteHREF=
|
http://ISYS _DC1/
|
URL
|
Subtitle=
|
<Untertitel>
|
Untertitel
|
Title=
|
<Titel>
|
Seitentitel
|
PwdLen=
|
6
|
Passwortlänge
|
Separator=
|
***
|
Parametertrennzeichen
|
Language=
|
D
|
Defaultsprache
|
Lifetime=
|
7200
|
Lebensdauer Cookie in Sekunden
|
Schalter für Entwickler
Sektionsbezeichnung: [DEVELOP]
Eintrag
|
Inhalt
|
Beschreibung
|
Debug=
|
0
|
1=Debug-Modus
|
Development=
|
0
|
1=Entwicklermodus
|
Test=
|
0
|
1=Testmodus
|
DLL=
|
1
|
muß auf 1 für DLL gesetzt sein
|
Log=
|
0
|
auf 1 stellen, wenn Log gewünscht ist
|
LogFile=
|
<>.LOG
|
Name Protokolldatei
|
LogINI=
|
0
|
auf 1 stellen bei Startproblemen
|
Farbeinstellungen
Sektionsbezeichnung: [COLORS]
Eintrag
|
Inhalt
|
Beschreibung
|
BackColor=
|
#C0C0C0
|
ggf. ändern für optischen Eindruck
|
ActiveColor=
|
#FF0000
|
ggf. ändern für optischen Eindruck
|
LinkColor=
|
#0000FF
|
ggf. ändern für optischen Eindruck
|
TextColor=
|
#000000
|
ändern für optischen Eindruck
|
VisitedColor=
|
#800080
|
ggf. ändern für optischen Eindruck
|
Schrifteinstellungen
Sektionsbezeichnung: [FONTS]
Eintrag
|
Inhalt
|
Beschreibung
|
FontFace=
|
Arial
|
ggf. ändern für optischen Eindruck
|
FontSize=
|
6
|
ggf. ändern für optischen Eindruck
|
Lokale Konfiguration
Sektionsbezeichnung: [LOCAL]
Eintrag
|
Inhalt
|
Beschreibung
|
Browser=
|
Iexplore.EXE
|
Default
browser für interaktives Testen
|
BrowserDir=
|
C:\inetpub\ browser\
|
Browser-Verzeichnis
|
LocalDrive=
|
C:
|
Lokales Laufwerk
|
LocalDir=
|
\inetpub
|
Lokales Serververzeichnis
|
ScriptDir=
|
Scripts
|
Lokales Skriptverzeichnis
|
DataDir=
|
Scripts\data
|
Lokales Datenverzeichnis
|
SysDataDir=
|
Scripts\data
|
Lokales Systemdatenverzeichnis
|
TempDir=
|
c:\inetpub\temp
|
Temporäres Verzeichnis
|
PictDir=
|
..\scripts\bilder
|
Bilderverzeichnis
|
RootDir=
|
wwwroot
|
Lokales Rootverzeichnis
|
Server-Konfiguration
Sektionsbezeichnung: [SERVER]
Eintrag
| Inhalt
| Beschreibung
|
LocalDrive=
|
c:
|
Laufwerksbezeichnung |
LocalDir=
|
\inetpub
|
Serververzeichnis |
ScriptDir=
|
scripts
|
Scriptsverzeichnis |
DataDir=
|
scripts\data
|
Datenverzeichnis |
SysDataDir=
|
scripts\data
|
Systemdatenverzeichnis |
TempDir=
|
c:\inetpub\tem |
Temporäres Verzeichnis
|
PictDir=
|
\scripts\bilde |
Bilder verzeichnis |
RootDir=
|
..\wwwroot
|
Root-Verzeichnis
|
Hinweis: Bitte die SITEHREF unbedingt auf den Namen
des Servers anpassen. Die Pfadeinträge und sonstigen Einträge möglichst vorsichtig und schrittweise ändern, da fehlerhafte Einträge zu definitiv fehlerhaftem Verhalten führen.
Einbindung der Anwendung
Abschließend noch ein paar Bemerkungen zu der Art der Einbindung bestehender Anwendungen. Die bisher dargestellten Klassen gehen nämlich nur davon aus, daß man Textbausteine in HTML selbst erstellt und diese dann zusammensetzt und die Anwendungslogik in den jeweiligen Buttons implementiert. Interessant wäre es jetzt natürlich, eine bestehende Anwendung bzw. bestehende Masken weiterverwenden zu können. Dafür wäre es notwendig, seiner eigenen Maskenklasse eine Methode hinzuzufügen, die in der Lage ist, die Maske selbst als HTML-String abzubilden. Das ist natürlich von vorneherein auf verhältnismäßig einfache Maskenlayouts beschränkt. Sämtliche Basisklassen könnte man dann mit einer eigenen Methode GENHTML versehen, und die Maskenklasse selbst könnte durch diese Methoden der Subobjekte kaskadieren (mit weiterer Kaskadierung innerhalb anderer Container-Klassen wir Container, Pageframe und Grid) und aus den zurückgelieferten Teilstrings die Gesamtdarstellung der Maske in HTML erzeugen.
Die Einbindung der eigenen Anwendung könnte dann grob wie folgt erfolgen:
- Für jede Maske wird ein entsprechender Aufrufbutton angelegt
- Die Maskenklassen werden mit einem Befehls-Parameter und Datenfeldern aufgerufen
- Bei einem Anzeigeparameter wird über GENHTML die Maske generiert und der HTML-String zurückgeliefert.
- Bei einem Skip- oder Move-Parameter wird auf den entsprechenden Satz gesprungen und ein Anzeige-String wie oben zurückgeliefert
- Bei einem Löschbefehl oder einer Neuanlage wird eine leere Maske angezeigt und als String zurückgeliefert.
- Bei einem Speicherbefehl werden alle übergebenen Daten in die jeweiligen Datenfelder generisch gespeichert. Bei Validierungsfehlern wird das entsprechende Feld farblich unterlegt und eine Informationszeile am Seitenende ausgegeben. Andernfalls wird die Maske wieder als normaler Anzeige-String zurückgeliefert.
Die Masken werden nach dem Aufruf des jeweiligen Internet-Buttons unsichtbar instanziiert. Alle in der Maske zur Verfügung stehenden Datenfelder werden über
GENHTML ausgegeben. Alle zur Verfügung stehenden Buttons werden über GENHTML ausgegeben und außerdem mit einer entsprechenden URL versehen, die bei einem Aufrufen des Buttons interpretiert werden muß.
Menüpunkte eines allgemeinen Menüs, von Toolbars sowie eines Kontextmenüs sind ebenfalls als Buttons darzustellen. Die Darstellungsmöglichkeiten von Menüs und Toolbars im Internet erfordern entsprechende Vorbereitungen. Eine GENHTML-Methode ist in den dFPUG-Framework-Basisklassen enthalten, aber bisher nur rudimentär gefüllt. Hier werden noch freiwillige Mithelfer benötigt.
Installation des Webservers
Auf den nachfolgenden Seiten wird die Installation der mit den dFPUG-Internetklassenbibliotheken erstellen Beispielanwendung auf einem Webserver beschrieben. Dafür sind leider einige Schritte notwendig - nach einige Zeit bekommt man darin aber glücklicherweise etwas Übung <g>.
Benötigte Verzeichnisse
Folgende Verzeichnisse sollten auf dem Server angelegt sein für einen reibungslosen Programmablauf:
Verzeichnis
|
Beschreibung
|
C:\TEMP
|
Ablage temporärer Dateien
|
INETSRV\TEMP
|
Interne Ablage von erzeugten HTML-Seiten
|
INETSRV\TEMP\TRANS
|
Interne Ablage für gezippte Download dateien |
INETSRV\SCRIPTS\BILDER oder \BMPS |
Ablage für Bitmaps/Bilder
|
INETSRV\SCRIPTS\DATA |
Ablage für Datenbestände
|
INETSRV\SCRIPTS\SYSTOOLS |
Verzeichnis für Hilfswerkzeuge
|
Benötigte Dateien
Folgende Anwendungsdateien werden in das Verzeichnis INETSRV\SCRIPTS kopiert:
Datei
|
Beschreibung
|
CONFIG.FPW
|
Konfigurationsdatei VFP
|
<Anwendung>.DLL
|
Eigentliche Anwendung als OLE.DLL
|
<Anwendung>.TLB
|
Type-Library
|
<Anwendung>.VBR
|
Registry-Einträge
|
<Abwendung>.INI
|
Konfigurationsdatei DLL
|
FOXISAPI.DLL
|
ISAPI-Schnittstelle für Visual FoxPro
|
FOXISAPI.CPP
|
C-Quellcode (nicht benötigt)
|
FOXISAPI.DEF
|
C-DEF-Datei (nicht benötigt)
|
FOXISAPI.MAK
|
C-Makefile (nicht benötigt)
|
FOXISAPI.RC
|
C-RC-Datei (nicht benötigt)
|
FOXTOOLS.FLL
|
(falls für eigene Zwecke benötigt)
|
Die FOXISAPI-Dateien kann man auch aus dem VFP-Verzeichnis \VFP \SAMPLES\ SERVERS\ FOXISAPI kopieren. Die dortigen Dateien sind aber möglicherweise veraltet. Besser ist deshalb vielleicht der Download von der Microsoft-Webseite.
Folgende Bitmpas von den Beispiel-Textbausteinen verwendet und müssen deshalb nach INETSRV\SCRIPTS\BILDER oder \BMPS kopiert werden:
Datei
|
Beschreibung
|
blue.gif
|
Blauer Bullet
|
red.gif
|
Roter Bullet
|
world.gif
|
Bild mit Internet-Weltkugel |
warning.gif
|
Bild für Warnhinweis
|
spanien.gif
|
Flagge Spanien für Sprachauswahl
|
deutschl.gif
|
Flagge Deutschland für Sprachauswahl
|
england.gif
|
Flagge England für Sprachauswahl
|
frankrei.gif
|
Flagge Frankreich für Sprachauswahl
|
italien.gif
|
Flagge Italien für Sprachauswahl
|
portugal.gif
|
Flagge Portugal für Sprachauswahl
|
*.bmp
|
zusätzliche Bitmaps der Anwendung
|
Die Datendateien werden nach INETSRV\SCRIPTS\DATA kopiert ("*" steht dabei für die Datei-Endungen .DBF, .FPT und .CDX):
Datei
|
Beschreibung
|
COOKIES.*
|
Eindeutige Benutzerkennungen
|
HTML.*
|
HTML-Textbausteine für Seitengenerierung
|
HTMLERRO.*
|
Fehlerseite (einkompiliert)
|
SPRACHE.*
|
Übersetzungstabelle für dt.,eng.,fr.,spa.,port.
|
ZULASSUN.*
|
Benutzerverwaltung mit Feldern für Name, Passwort und Rechte
|
SYSDB.DBF
|
Systemparameter (Sprache u.ä.)
|
WEB.*
|
Datenbankcontainer
|
Mitgeliefert bei den Klassenbibliotheken werden außerdem in einem separaten Verzeichnis einige Entwicklertools, die sich bei der Arbeit mit dem Internet Information Server in der Praxis massiv bewährt haben. Es wird deshalb empfohlen, sich folgende Entwicklertools nach INETSRV\SCRIPTS\SYSTOOLS zu kopieren:
Datei
|
Beschreibung
|
KILL.EXE
|
DOS-Prozess-Terminator
(Killt wirklich alles)
|
TLIST.EXE
|
DOS-Prozess-Lister
|
PVIEWER.EXE
|
Prozess-Viewer (killt nicht alles <g>)
|
OLE2VIEW.*
|
OLE2-Registry-Viewer (übersichtlicher)
|
Die Beispielanwendung arbeite mit einem ActiveX-Control bzw. der DLL-Variante davon für das Komprimieren von Dateien. Eingesetzt wurde dabei das Tool DYNAZIP, welches aber leider nicht für Entwickler mitgeliefert werden darf. Sofern Sie ebenfalls DYNAZIP einsetzen, müssen in das SYSTEM32-Verzeichnis von Windows NT Server folgenden Dateien installiert werden:
Datei
|
Beschreibung
|
DZIP32.DLL
|
Dynazip-Komprimierungs-DLL
|
DZOCX32.LIC
|
Dynazip-Lizenzdatei
|
DZOCX32.OCX
|
Dynazip-OCX-Datei
|
DUZIP32.DLL
|
Dynazip-DeKomprimierungs-DLL
(für Beispielwebserver nicht benötigt)
|
DUZOCX32.LIC
|
Dynazip-Lizenzdatei (nicht benötigt)
|
DUZOCX32.OCX
|
Dynazip-OCX-Datei (nicht benötigt)
|
MFCANS32.DLL
|
benötigte Windows NT-Systemdatei
|
OC30.DLL
|
benötigte Windows NT-Systemdatei
|
Die Startseite der Anwendung muß man abschließend nach INETSRV\WWWROOT kopieren:
- INETSRV\WWWROOT\DEFAULT.HTM
Die Startseite muß man immer gleich testen. Prüfen Sie, ob die Seite geöffnet werden kann und die Bilder (Länderflaggen) erscheinen bevor irgendetwas anderes installiert wird (wenn die Seite samt Bilder nicht erscheint, muß man zuerst die Benutzerrechte und die IIS-Konfiguration prüfen, siehe unten).
Hinweis: Unter IIS 1.0 wurde eine fehlerhafte DEFAULT.HTM mitgeliefert, die bei zugreifenden Anwender die völlig irreführende Fehlermeldung "Netzwerkverbindung überprüfen" auslöst. Diese fehlerhafte Seite unbedingt löschen, falls sie sich noch auf dem System befinden sollte.
Installation der DLLs
Die Webserver-Anwendung wird als DLL erstellt. Diese DLL-Hauptdatei wird zusammen mit der INI-Konfigurationsdatei in das INETSRV\SCRIPTS-Verzeichnis kopiert:
- INETSRV\SCRIPTS\<Anwendung>.DLL
- INETSRV\SCRIPTS\<Anwendung>.INI
Wichtig: Der Pfad für die INI-Datei ist dabei HARDCODIERT in der DLL. Es gibt dabei üblicherweise verschiedene mögliche Pfade je nach NT-Installation:
- C:\WINNT\SYSTEM32\INETSRV\SCRIPTS\
- C:\NTSERVER\INETSRV\SCRIPTS\
- C:\INETPUB\SCRIPTS\
Hinweis: In diesem Falle muß der Betriebssystempfad verwendet werden. Innerhalb von HTML-Seiten und -Textbausteinen hingegen ist der relative Pfad aus Sicht des Internet Information Servers zu verwenden. D.h. alle Pfadangaben müssen von dem Verzeichnis SCRIPTS ausgehen und Dateien auf der gleichen Ebene wie SCRIPTS muß man über "..\<Verzeichnis>\<Datei.Endung>" ansprechen.
Abschließend muß man die nachfolgenden DLLs auf REGSRV32.EXE fallen lassen zwecks Registrierung (sofern man die Anwendung mit .DLL als Endung verknüpft hat; andernfalls REGSRV32.EXE mit nachfolgendem Pfad+Dateiname aufrufen).
- alle Dynazip-DLL/OCX-Dateien in SYSTEM32
- sowie INETSRV\SCRIPTS\<Anwendung>.DLL
Dabei muß die Systemmeldung erfolgreich sein, sonst konnten die Bibliotheken nicht in der Registry eingetragen werden und stehen somit nicht zur Verfügung. Falls Windows NT 4.0 sich über die Type-Library (<Anwendung>.TLB) beschwert, diese löschen und die Erstellung und Registrierung einfach nochmals durchführen. Falls die TLB- und/oder die VBR-Datei fehlen oder Probleme bereiten, notfalls einfach die gleich-endigen FOXIS.*-Dateien aus dem VFP-Verzeichnis \VFP\ SAMPLES\ SERVERS\ FOXISAPI kopieren, umbennenen und es erneut probieren.
Internetserver kontrollieren
Damit bei Fehlermeldungen und Abstürzen der selbst erstellten .DLL bzw. von VFP eine optische Rückmeldung erfolgen kann, muß man zuallererst unter "Dienste" den Service "WWW-Publishing-Service" anwählen und die Box "Interaktive Beziehung mit dem Desktop erlauben" ankreuzen. Im Fehlerfalle ist es jetzt möglich, daß eine Messagebox auf dem Server erscheint. Diese poppt aber nicht automatisch nach vorne sondern man muß mit dem Taskbar dahin wechseln. Sofern diese Checkbox nicht markiert wird, führt eine Fehlermeldung oder Messagebox zu einem echten Problem. Diese werden nämlich unsichtbar angezeigt - der Server hält aber dennoch an, bis man den OK-Button mit Tastatur oder Maus anwählt, was technisch leider völlig unmöglich ist. In einem solchen Falle muß man dann auf das Tool KILL.EXE zurückgreifen.
Nach dieser vorbereitenden Maßnahme muß man dann in der Administrationsanwendung INETSRV.EXE die Konfiguration des Webservers auf folgende Punkte hin kontrollieren:
- DEFAULT.HTM sollte als Default-Seite eingetragen sein und die Verwendung einer Default-Seite enabled sein.
- READ/EXECUTE-Rechte müssen auf das Scripts-Verzeichnis und READ-Rechte müssen auf das WWWROOT-Verzeichnis bestehen.
- READ-Rechte auf das INETSRV\TEMP-Verzeichnis sind nur eventuell notwendig.
- Directory-Browsing sollte nicht erlaubt sein.
- Alle anderen Voreinstellungen sollten so übernommen werden können. Man sollte erstmal keine TCP/IP-Adressen vom Zugriff aussperren.
Hinweis: Bei Performance-Problemen sollte man in der Registry den Eintrag HKEY_LOCAL_MACHINE /SYSTEM /CURRENTCONTROLSET /SERVICES /W3SVC /PARAMETER und dort CacheEnabled auf 1 setzen. Dadurch wird die eigene Webserver-.DLL samt VFP nicht bei jedem Aufruf über das Internet neu in den Hauptspeicher geladen, sondern verbleibt nach dem ersten (langsameren) Start im Speicher für den nächsten Aufruf. Jetzt kann man den Webserver allerdings nur noch mit dem KILL-Utility beenden, wenn man die Webserver-Applikation nicht vorher mit dem Parameter "RESET" zum Abdanken gezwungen hat.
Benutzerrechte kontrollieren
Den Username und das Passwort des auf der ersten Seite bei INETSRV.EXE genannten anonymen Users sollte man unbedingt mit der Benutzerverwaltung von NT abgleichen! Vorsichtshalber sollte man das Passwort an beiden Stellen neu eingeben, da man keine Erfolgsrückmeldung bekommt und bei INETSRV.EXE das Passwort auch nicht zur Kontrolle doppelt eingeben kann. Das Benutzerkonto sollte man auf jeden Fall daraufhin überprüfen, ob es deaktiviert oder zeitlich eingeschränkt ist. Der Benutzer benötigt außerdem Zugriffsrechte unter NT auf nachfolgende Dateien bzw.Verzeichnisse:
Datei/Verz.
|
Beschreibung
|
SYSTEM32\VFP*.DLL
|
Visual FoxPro Bibliothek
|
SYSTEM32\DY*.DLL/OCX
|
Dynazip DLL/OCX für Komprimierung
|
SCRIPTS\*.*
|
Für Ausführung der DLLs
|
INETSRV\TEMP\*.*
|
für Datendownload
|
C:\TEMP\*.*
|
für temporäre Arbeitsdateien
|
Bei Problemen mit dem User ggf. diesem zumindest für Testzwecke Administrator-Rechte sowie Rechte zur lokalen Anmeldung und zur Anmeldung als Service geben.
DCOMCNFG kontrollieren
Unter Windows NT 4.0 muß DCOM korrekt konfiguriert werden, d.h. der Internet-User (siehe oben) muß im dritten Reiter der Maske bei allen drei Buttons eingetragen werden (jeweils Benutzer hinzufügen und das richtige von den beiden möglichen Rechten erteilen). Desweiteren im zweiten Reiter die beiden Popups für die Authorisierung auf den niedrigstmöglichen Level setzen.
Hinweis: DCOMCNFG hat unter NT4.0 desöfteren kleinere Probleme (zumindest bis zum Service Pack 3), dies ist eine auch MS bekannte Tatsache. Dadurch kann es möglich sein, daß statt mit den korrekten Einstellungen wahlweise mit dem Modus "Pauschal alle Rechte für alle" oder "Pauschal keine Rechte für niemanden" hochgefahren wird, obwohl in DCOMCNFG alles richtig eingegeben wurde. Falls man also an Zugriffsrechten auf die DLL scheitert, obwohl alle Benutzerrechte korrekt definiert sind, muß man einfach DCOMCNFG starten und wieder schließen (hilft meistens). Falls dies auch nicht hilft, kann man den Rechner nur noch neu booten. Wegen diesem Verhalten muß man vor jeder Vorführung/Test erstmal kontrollieren, ob OLE-DLLs aller Art überhaupt geladen werden können. Diese Probleme sollten mit dem neuesten Service Pack für NT behoben sein.
Verknüpfungen
Zur Beschleunigung der Arbeit empfehle ich, folgende Verknüpfungen auf den Desktop zu legen:
Datei
|
Beschreibung
|
SYSTOOLS\ KILL.EXE inetinfo.exe
|
Beendet bei Anklicken den Webserver zwecks Neustart
|
INETSRV.EXE
|
Steuerung des Webservers (für ggf. Neustart)
|
REGSRV32.EXE
|
Zum Anmelden diverser DLLs und OCXce.
|
IEXPLORE.EXE
|
Internet Explorer 4.0 (nicht 1.5 oder 2.0!)
|
DCOMCNFG.EXE
|
Auf NT 4.0 für Rechtekontrolle (ggf. mehrfach anstoßen, siehe Erläuterung)
|
SCRIPTS
|
Verknüpfung auf das SCRIPTS-Verzeicnis
|
WWWROOT
|
Verknüpfung auf das WWWROOT-Verzeichnis
|
Anhang: Installation des VFP-Beispiels
Bevor man einen eigenen Webserver programmiert und installiert, sollte man das Verfahren vorab an dem kleinen Beispiel-Webserver ausprobieren, der bei Visual FoxPro im Unterverzeichnis \SAMPLES\ SERVERS\ FOXISAPI mitgeliefert wird. Deshalb nachfolgend einige Erläuterungen zur Installation und zum Testen des bei VFP mitgelieferten Webservers.
Im Beispiel sollte man zuerst ein paar Eigenschaften kontrollieren bzw. anpassen. Dafür muß man die Projektdatei FOXIS.PJX im Servers\Foxisapi-Verzeichnis öffnen und den Reiter Klassen anwählen. Von dort aus dann die Klasse ISAPI öffnen und die Eigenschaft SCRIPTDIR ändern auf: C:\VFP\ SAMPLES \SERVERS \FOXISAPI, damit der Server direkt aus seinem Beispielverzeichnis gestartet werden kann. Desweiteren die Klasse EMPLOYEE öffnen und die Eigenschaft DBFNAME ändern von EMPLOYEE.DBF auf EMPLOYEE, um eine Fehlermeldung betreffs des Öffnen der Dateien zu vermeiden. Außerdem die Eigenschaft DBCNAME neu eintragen mit der vollen Pfadangabe C:\VFP \SAMPLES \DATA \TESTDATA.
Die Installation der VFP-Beispielanwendung erfolgt in folgenden Schritten:
- "Build Projekt" anwählen und eine DLL erstellen und diese in das SCRIPTS-Verzeichnis des Webservers abspeichern.
- die erstellte FOXIS.DLL mit REGSRV32.EXE registrieren.
- die FOXISAPI.DLL (neueste Version) muß sich im SCRIPTS-Verzeichnis befinden, also ggf. dorthin kopieren, falls nicht zuvor geschehen.
- Dem INETUSR-Anwender Vollzugriff auf die folgenden Verzeichnisse einräumen
- C:\VFP \SAMPLES \SERVERS \FOXISAPI
- C:\VFP \SAMPLES \DATA \TESTDATA
Ggf. muß man DCOMCNFG noch mal anstoßen (siehe Abschnitt Installation) und bei einem Fehlversuch auf jeden Fall den Webserver mit KILL.EXE beenden und neu starten, damit die Änderungen dort auch registriert werden. Die Testdaten der Anwendung dürfen nicht wie im Readme beschrieben in das Script-Verzeichnis kopiert werden, da leider die Dateinamen HTML und COOKIES auch von anderen Beispielanwendungen verwendet werden (allerdings für Dateien mit anderer Struktur).
Anhang: Test/Vorführung VFP-Beispiel
Zuallererst sollte man einen interaktiven Test der Anwendung mit folgenden Befehlszeilen im Befehlsfenster vornehmen:
CLEAR ALL
CLOSE ALL
SET EXCL OFF
CD C:\VFP\SAMPLES\SERVERS\FOXISAPI
SET CLASSLIB TO ISAPI
OX=CREATE("EMPLOYEE")
OX.SHOW()
Jetzt müßte die Anwendung sichtbar geworden sein. Als nächstes erfolgt der Test der HTML-Seitenausgabe mit dem Befehl:
Sofern die Anwendung gestartet werden und ein HTML-String in den VFP-Dektop ausgegeben werden konnte, war die Erstellung und Registrierung des COM-Servers erfolgreich. Nunmehr erfolgt der Test der Anwendung über einen Webbrowser. Dafür startet man den Internet Explorer und gibt folgende Befehlszeile / URL ein:
http://<servername>/scripts/foxisapi.dll/foxis.employee.startup
Diesen Eintrag kann man auch mit der nachfolgenden Zeile in eine Webseite übernehmen:
<A HREF="/scripts/foxisapi.dll/foxis.employee.startup"> <I>Demo</I></A>
Einen möglicherweise vorhandenen Proxy-Server sollte man abschalten, da diese die wechselnden Seiteninhalte bei Datensatzwechsel möglicherweise nicht erkennen, wenn Datum bzw. Uhrzeit beim Client oder beim Server nicht korrekt eingestellt sind. Alternativ (und besser) ist die Einstellung eines Expiration Dates in den generierten Webseiten auf ein bereits abgelaufenes Datum.
Zu dem VFP-Beispiel gibt es eine mitglieferten kurze Dokumentation in der Datei README.TXT im Projektverzeichnis. Ein paar wesentliche Hinweise stehen auch am Anfang des C-Codes in der Datei FOXISAPI.CPP. Weitere Details sind im entsprechenden Vortragsdokument von Calvin Hsia (Microsoft) zu finden. Dieses kann man von http://calvinh3 (Remote Adress 157.55.147.71) unter dem Namen CUSTOLE.DOC downloaden.
Anhang: Abkürzungen
Nachfolgend nochmals eine Übersicht über die wichtigsten im Artikel verwendeten Abkürzungen:
Abkürzung
|
Beschreibung
|
DLL
|
Abk. für Dynamic Link Library
|
HTML
|
Abk. für Hypertext Markup Language
|
INETSRV.EXE
|
Internet Service Manager (Konfigurationsprogramm)
|
INETINFO
|
Internet Information Server-Anwendung
|
IIS
|
Abk. für Internet Information Server
|
IEXPLORE.EXE
|
Internet Explorer 4.0 (die vorigen Versionen 1.5 und 2.0 nicht verwenden!)
|
INETSRV\
|
wird im Text für das Verzeichnis des IIS verwendet, daß wahlweise im Hauptverzeichnis oder im SYSTEM32-Verzeichnis von NT unter den Namen INETSRV oder INETPUB angelegt wird.
|
SCRIPTS\
|
Unterverzeichnis von INETSRV\ für ausführbare Programme des IIS
|
WWWROOT\
|
Unterverzeichnis von INETSRV\ für einfache HTML-Seiten sowie ggf. die Startseite des Servers
|
|