FoxWeb, ein vereinfachter Visual FoxPro-Internetautomatisierungsserver

FoxWeb ist ein vereinfachtes Beispiel eines ISAPI-Automatisierungsservers, mit dem Sie rasch eine Website erstellen und in Betrieb nehmen können. FoxWeb enthält eine neue Version von Foxisapi.dll (auch im Visual FoxPro-Serverbeispiel FoxIs enthalten). Foxisapi.dll kann jetzt mehrere Instanzen von Visual FoxPro-Automatisierungsservern verwalten und stellt zusätzliche Debugmethoden für Visual FoxPro-Anwendungen zur Verfügung, die für das Internet entwickelt wurden.

FoxWeb-Automatisierungsserver

Das FoxWeb-Beispiel verwendet eine einfache Visual FoxPro-Server-Klasse, mit der die grundsätzliche Verwendung eins Servers unter FoxISAPI gezeigt werden soll. Der gesamte Code ist in der Datei Foxweb.prg gespeichert. Diese Datei enthält eine Klasse namens Server, die als OLEPUBLIC gekennzeichnet ist, so dass sie bei der Erstellung als Automatisierungsserver-COM-Komponente registriert wird. Diese Klasse wird von FoxISAPI erzeugt und enthält eine Reihe von Methoden, die, wie unten gezeigt, aufgerufen werden können (wie z. B. die Methoden Hello und Delay). Diese Methoden erklären die Strukturen, die für das einwandfreie Funktionieren von FoxISAPI benötigt werden.

FoxWeb-Beispieldateien

Die Dateien für das neue Visual FoxPro-Automatisierungsserverbeispiel FoxWeb befinden sich im Visual FoxPro-Ordner …\Samples\Servers\Foxisapi\FoxWeb.

Einrichten des FoxWeb-Automatisierungsservers

Die folgenden Abschnitte beschreiben, wie Sie Visual FoxPro verwenden, um mit FoxWeb eine Website rasch einzurichten und in Betrieb zu nehmen.

Registrierung des Visual FoxPro FoxWeb-Automatisierungsservers

Die Visual FoxPro-Automatisierungsserver, die HTML zurückgeben, müssen registriert werden. Die Registrierung erfolgt automatisch, wenn die EXE- oder DLL-Datei mit Hilfe des Visual FoxPro-Projekt-Managers oder mit dem Befehl BUILD EXE, BUILD DLL oder BUILD MTDLL erstellt wurde. Wenn Sie beispielsweise das Projekt Foxweb, das im FoxWeb-Beispiel enthalten ist, im Projekt-Manager öffnen, können Sie Erstellen wählen, um einen Automatisierungsserver als prozessinterne DLL- oder als prozessexterne EXE-Datei zu erstellen. Beachten Sie bitte, dass die Registrierung nur auf dem Computer erfolgt, auf dem die Datei erstellt wurde.

Ein Visual FoxPro-Automatisierungsserver, der als prozessexterne EXE-Datei erstellt wurde, kann auch registriert werden, indem der Name des Automatisierungsservers angegeben und die Option /RegServer einbezogen wird. Der folgende Befehl registriert den Visual FoxPro FoxWeb-Automatisierungsserver:

Foxweb.exe /RegServer

Ein Visual FoxPro-Automatisierungsserver, der als prozessinterne DLL-Datei erstellt wurde, kann auch mit Regsvr32.exe registriert werden. Der folgende Befehl registriert den Visual FoxPro Foxweb-Automatisierungsserver:

Regsvr32 Foxweb.dll

Anmerkung   Wenn ein Visual FoxPro-ISAPI-Automatisierungsserver zusätzliche Dateien wie GIF- oder JPG-Dateien verwendet, sollten Sie sicherstellen, dass diese Dateien sich in Verzeichnissen befinden, auf die Internet Information Server oder Personal Web Server zugreifen kann.

Verwenden Ihres Webbrowsers für den Zugriff auf einen Visual FoxPro ISAPI-Automatisierungsserver

Auf einen Visual FoxPro ISAPI-Automatisierungsserver kann man mit einem Webbrowser zugreifen, indem man den URL (Universal Resource Locator) des Automatisierungsservers angibt. Der Webbrowser sendet eine HTTP-Anforderung, die an Ihren Internet Information Server oder Personal Web Server weitergeleitet wird. Der Server leitet die Anforderung an Foxisapi.dll weiter, die sie wiederum an Ihren Automatisierungsserver weiterleitet.

Der nachstehend aufgeführte URL greift auf den ISAPI-Automatisierungsserver namens Foxweb.Server zu:

HTTP://MyServer/Scripts/Foxisapi.dll/Foxweb.server.Delay?30

Die folgende Tabelle beschreibt jedes Element des obigen URL-Beispiels:

URL-Element Beschreibung
Myserver Der virtuelle Ordner Ihres Internet Information Servers oder des Personal Web Servers.
Scripts/Foxisapi.dll Der Skriptordner des Internet Information Servers oder von Personal Web Server und Foxisapi.dll.
Foxweb.Server Der aufzurufende registrierte Name (ProgID) des Visual FoxPro ISAPI-Automatisierungsservers.

In diesem Beispiel ist Foxweb der Name der EXE- oder DLL-Datei für den Visual FoxPro-Automatisierungsserver. Server ist der Klassenname, der in der OLEPUBLIC-Klausel des DEFINE CLASS-Befehls angegeben wurde, mit dem der Automatisierungsserver erzeugt wurde.

Foxweb.Server ist auch die ProgID für den Automatisierungsserver, wie sie in der Windows-Registrierung gespeichert ist. Mit RegEdit können Sie die ProgID des Automatisierungsservers ermitteln und verändern.

Delay Der Name der Methode, die auf dem Visual FoxPro ISAPI-Automatisierungsserver ausgeführt werden soll.
?30 Ein Parameter, der an die Methode übergeben wird. Das Fragezeichen ist ein Trennzeichen, das anzeigt, dass ein Parameter folgt. Für diese Methode gibt der Wert 30 an, dass die Ausführung um 30 Sekunden verzögert wird. Der Parameter wird als Zeichenfolge übergeben.

Übergabe von Parametern an Methoden

Der folgende Code ist der Delay-Methode in Foxweb.prg entnommen und zeigt die Struktur für Methoden, die auf Visual FoxPro ISAPI-Automatisierungsservern ausgeführt werden.

PROCEDURE Delay
   LPARAMETERS cParm1, cIniFile, nPersistInstance

** Your code here ** RETURN AnHTMLString ENDPROC

  • cParm1
    Eine Zeichenfolge, die an die Methode übergeben wird. In der Delay-Methode gibt dieser Parameter die Anzahl Sekunden an, um die die Ausführung verzögert wird.
  • cIniFile
    Der Name der INI-Datei (wird der Methode von Foxisapi.dll übergeben), die jedes Mal erzeugt wird, wenn auf einen Visual FoxPro ISAPI-Automatisierungsserver zugegriffen wird. Jede INI-Datei wird im Ordner Scripts erstellt und hat einen eindeutigen Namen, der mit "Fox" beginnt. Mit der GetPrivateProfileString-Funktion in Foxweb.prg können Sie Informationen aus der INI-Datei lesen und benutzerspezifisches HTML zurücksenden, basierend auf der Benutzerkonfiguration.
  • nPersistInstance
    Gibt an, ob die Instanz des Visual FoxPro ISAPI-Automatisierungsservers weiter besteht, nachdem die Ausführung der Methode beendet wurde. nPersistInstance wird der Methode von Foxisapi.dll als Verweis übergeben. Wenn nPersistInstance in Ihrer Webanwendung auf 0 festgelegt wird, bleibt die Instanz des Automatisierungsservers nach beendeter Ausführung bestehen. Wenn nPersistInstance einen anderen Wert als 0 besitzt, wird die Instanz des Automatisierungsservers freigegeben. Für optimale Leistung sollte nPersistInstance auf 0 festgelegt werden, da ansonsten der Automatisierungsserver beim nächsten Aufruf erneut gestartet werden muss.

Verwenden von "Foxisapi.dll" zur Zusammenfassung von Automatisierungsservern

Da Foxisapi.dll free-threaded ist, kann es jetzt mehrere Visual FoxPro ISAPI-Automatisierungsserver zusammenfassen, um verbesserte Skalierbarkeit für Ihre Webanwendungen zu erreichen. Zusammengefasste ISAPI-Automatisierungsserver ermöglichen einem freien ISAPI-Automatisierungsserver, eine Anforderung zu beantworten, wenn andere ISAPI-Automatisierungsserver beschäftigt sind. Um die Vorteile der Zusammenfassung von ISAPI-Automatisierungsservern zu nutzen, sollten die Instanzen der ISAPI-Automatisierungsserver persistent gehalten werden, indem nPersistInstance in Ihrer Webanwendung auf 0 festgelegt wird.

Die Anzahl der ISAPI-Automatisierungsserver, die zur Beantwortung von Anforderungen zur Verfügung stehen, wird durch Einstellungen in der Datei Foxisapi.ini angegeben. Zur Erzeugung eines Pools aus mehreren ISAPI-Automatisierungsservern geben Sie zusammen mit dem Namen des ISAPI-Automatisierungsservers, für den ein Pool erzeugt wird, einen Eintrag in eckigen Klammern an. Diesem Eintrag folgt eine Liste der ISAPI-Automatisierungsserver, aus denen der Pool besteht, mit einem Zahlenwert, der die maximale Anzahl von Instanzen angibt, die für jeden ISAPI-Automatisierungsserver erzeugt werden kann.

Die folgenden Zeilen in Foxisapi.ini erzeugen beispielsweise einen Pool von sieben ISAPI-Automatisierungsservern zur Bearbeitung von Anforderungen an Foxweb.myserver. Foxisapi.dll erzeugt bis zu vier Instanzen des Foxweb.server ISAPI-Automatisierungsservers und bis zu drei Instanzen des Foxweb2.server ISAPI-Automatisierungsservers zur Bearbeitung von Anforderungen.

[FOXWEB.MYSERVER]
FOXWEB.SERVER=4
FOXWEB2.SERVER=3

Der folgende URL führt die Delay-Methode entweder auf einer Instanz des ISAPI-Automatisierungsservers Foxweb.server oder Foxweb2.server aus:

HTTP://MyServer/Scripts/Foxisapi.dll/Foxweb.Myserver.Delay?30

Foxisapi.ini kann angeben, dass die ISAPI-Automatisierungsserver im Voraus instanziiert werden, noch bevor eine Anforderung eintrifft. Hierzu fügen Sie ein Komma, gefolgt von einem Sternchen (*), nach der Anzahl der Instanzen an, wie im folgenden Beispiel gezeigt wird.

[FOXWEB.MYSERVER]
FOXWEB.SERVER=4,*
FOXWEB2.SERVER=3,*

Verwendung des Pool-Managers auf mehreren Computern

Foxisapi.dll hat die Fähigkeit, Visual FoxPro ISAPI-Automatisierungsserver auf mehreren Computern zu verwalten. Sie können Remoteautomatisierung oder DCOM (Distributed Component Object Model) verwenden, um auf die ISAPI-Automatisierungsserver zuzugreifen. Beachten Sie, dass für optimale Leistung und Skalierbarkeit die Instanzen der ISAPI-Automatisierungsserver persistent gehalten werden sollten, indem nPersistInstance in Ihrer Webanwendung auf 0 festgelegt wird.

Das folgende Beispiel beschreibt ein Szenario, in dem zwei Visual FoxPro ISAPI-Automatisierungsserver, Foxweb und Foxweb2, auf zwei Computern verwendet werden.

Machine_A ist der lokale Computer, auf dem Windows 98, DCOM und Personal Web Server ausgeführt werden. Machine_B ist der über das Netzwerk zugängliche Remotecomputer, auf dem Windows NT, Version 4.0 oder höher, und DCOM ausgeführt werden.

  1. Machine_A ist Ihr Visual FoxPro-Entwicklungscomputer, auf dem die Visual FoxPro FoxISAPI-Automatisierungsserverbeispiele installiert wurden. Öffnen Sie auf diesem Computer das Projekt Foxweb im Visual FoxPro-Projekt-Manager, und wählen Sie Erstellen, um einen ISAPI-Automatisierungsserver als prozessexterne EXE-Datei zu erstellen. Bei der Erstellung der EXE-Datei wird automatisch der ISAPI-Automatisierungsserver auf dem Computer als Foxweb.exe registriert. Öffnen Sie jetzt das Projekt Foxweb2 im Visual FoxPro-Projekt-Manager, und wählen Sie Erstellen, um einen weiteren ISAPI-Automatisierungsserver als EXE-Datei zu erstellen und zu registrieren.

  2. Um zu überprüfen, ob die ISAPI-Automatisierungsserver Foxweb und Foxweb2 einwandfrei registriert wurden, können Sie mit RegEdit nach Foxweb und Foxweb2 suchen. Beachten Sie, dass die ProgIDs für die Server Foxweb.Server bzw. Foxweb2.Server lauten. Server ist der Klassenname, der in der OLEPUBLIC-Klausel des DEFINE CLASS-Befehls angegeben wurde, mit dem der ISAPI-Automatisierungsserver erzeugt wurde. Foxweb.prg ist die Visual FoxPro-Internetanwendung, die sowohl im Projekt Foxweb als auch Foxweb2 enthalten ist.

  3. Die ProgIDs beider ISAPI-Automatisierungsserver zeigen auf Machine_A, den lokalen Computer. Die Registrierungseinstellungen für den Foxweb2 ISAPI-Automatisierungsserver müssen geändert werden, um auf Machine_B, den Remotecomputer, zu zeigen. Verwenden Sie Clireg32.exe (weitere Informationen finden Sie unter Clireg32.exe (Dienstprogramm für die Remoteautomatisierung)), um den Zeiger in der Registrierung zu ändern. Clireg32.exe wird verwendet, um Aufrufe von Foxweb2 zu Machine_B umzuleiten. Der folgende Befehl, der im Windows-Dialogfeld Ausführen ausgeführt wird, führt Clireg32.exe aus:

    CLIREG32 FOXWEB2.VBR
    

    Ein Dialogfeld wird angezeigt, das es Ihnen ermöglicht, Machine_B als Remoteserver anzugeben, zu dem Aufrufe von Foxweb2 umgeleitet werden sollen. Die Option Remote Transport in diesem Dialogfeld ermöglicht es Ihnen, Distributed COM oder Remote Automation als Transportmethode zu wählen. Wählen Sie Distributed COM.

  4. Kopieren Sie jetzt die Dateien Foxweb2.exe, Foxweb2.vbr und Foxweb2.tlb von Machine_A, dem lokalen Computer, auf Machine_B, den Remotecomputer.

  5. Verwenden Sie die Option /RegServer im MS-DOS-Fenster, um Foxweb2.exe auf Machine_B zu registrieren:

    C:\VFP\FOXWEB2.EXE /RegServer
    
  6. Zuletzt beenden Sie Personal Web Server auf Machine_A, und führen einen Neustart durch, um sicherzustellen, dass er die Änderungen in der Registrierung berücksichtigt.

Sie können den Status-Befehl auf Foxisapi.dll ausführen, um den Status aller ISAPI-Automatisierungsserver zu ermitteln, die in Foxisapi.ini registriert sind. Der folgende URL führt den Status-Befehl aus:

HTTP://Machine_A/Scripts/FoxISAPI.dll/Status

Sie können den Reset-Befehl auf Foxisapi.dll ausführen, um alle ISAPI-Automatisierungsserver zurückzusetzen, die in Foxisapi.ini registriert sind. Der Reset-Befehl gibt alle ISAPI-Automatisierungsserverinstanzen frei. Der folgende URL führt den Reset-Befehl aus:

HTTP://Machine_A/Scripts/FoxISAPI.dll/Reset

Zum Test der Installation können Sie so viele Instanzen Ihres Webbrowsers öffnen, wie sich ISAPI-Automatisierungsserver im Pool befinden. Die Webbrowser können sich auf mehreren Computern in Ihrem Netzwerk befinden. Sie können dann im URL die Delay-Methode von jedem Webbrowser aus aufrufen, so dass Foxisapi.dll die Anforderungen an die anderen freien ISAPI-Automatisierungsserver umleitet. Nachdem die Delay-Methode von jedem Webbrowser aus ausgeführt wurde, können Sie die Status-Methode verwenden, um zu prüfen, ob alle ISAPI-Automatisierungsserver im Pool Anforderungen erhalten haben.

Verwenden von FoxISAPI mit DLL-Servern

Wenn Sie FoxISAPI mit prozessinternen Multithreadservern in der vorherigen Version von Visual FoxPro verwenden, müssen Sie die Unterstützung für den Pool-Manager in FoxISAPI deaktivieren. Die Deaktivierung können Sie mit Hilfe der PoolMode-Einstellung in der Datei Foxisapi.ini vornehmen. Die PoolMode-Einstellung gilt global für alle Server; aus diesem Grund sollten Sie vermeiden, dass eine einzelne Foxisapi.dll als Dienst sowohl für EXE- als auch für DLL-Server fungiert. Stattdessen sollten Sie die Dateien Foxisapi.dll und Foxisapi.ini kopieren und umbenennen, so dass ein Satz für EXE-Server und ein Satz für DLL-Server zur Verfügung steht.

Ein Beispiel für die Verwendung des Pool-Managers finden Sie unter Pool-Manager: Beispiel für einen Automatisierungsserver.

Debuggen Ihrer ISAPI-Automatisierungsserver

Foxisapi.dll ermöglicht Ihnen darüber hinaus das Debuggen von ISAPI-Automatisierungsservern auf dem lokalen Computer. Legen Sie die Anzahl der Instanzen des ISAPI-Automatisierungsservers, den Sie debuggen möchten, auf 0 fest, wie es die folgende Datei Foxisapi.ini zeigt:

[FOXWEB.MYSERVER]
FOXWEB.SERVER=0

Die Programmdatei Odebug.prg muss sich in Ihrem Visual FoxPro Stammverzeichnis befinden, und die ISAPI-Automatisierungsserver-Quelldateien müssen vorhanden sind. Stellen Sie sicher, dass der ISAPI-Automatisierungsserver, den Sie debuggen möchten, als persistenter ISAPI-Automatisierungsserver konfiguriert ist, und in dem Projekt, das die ISAPI-Automatisierungsserver-Quelldateien enthält, Debuginformation aktiviert ist.

Wenn die Instanz des ISAPI-Automatisierungsservers erzeugt wird, wird Visual FoxPro von Foxisapi.dll zum Debuggen gestartet, wodurch Ihnen das Festlegen von Haltepunkten, die Programmverfolgung usw. ermöglicht wird.

"Foxisapi.dll"-Befehle

Foxisapi.dll enthält Befehle, mit denen Sie den Status Ihrer ISAPI-Automatisierungsserver feststellen und die Server zurücksetzen können. Die folgende Tabelle listet die Foxisapi.dll-Befehle mit Beschreibungen auf.

Befehl Beschreibung
MultiMode Führt den Reset-Befehl aus und begrenzt dann die Anzahl der ISAPI-Automatisierungsserverinstanzen auf die in Foxisapi.ini angegebenen Werte.
PoolMode Aktiviert oder deaktiviert die Unterstützung des Pool-Managers in FoxISAPI. Mit Hilfe dieses Befehls können Sie den Pool-Manager für prozessinterne DLL-Server deaktivieren.

      0 - deaktiviert      1 - aktiviert (Standardeinstellung)

Reset Gibt alle Instanzen der ISAPI-Automatisierungsserver frei.
SingleMode Führt den Reset-Befehl aus und begrenzt dann die Anzahl der ISAPI-Automatisierungsserverinstanzen auf Eins. Führen Sie diesen Befehl aus, um Wartungsarbeiten durchzuführen. Sie können beispielsweise Tabellen exklusiv öffnen, wenn SingleMode aktiv ist.
Status Zeigt den aktuellen Status der ISAPI-Automatisierungsserver an, die Foxisapi.ini-Einstellungen und, ob SingleMode oder MultiMode aktiv ist.

Jeder der Foxisapi.dll-Befehle wird mit einem URL aufgerufen, der in Foxisapi.ini angegeben ist. Im Folgenden wird der Inhalt der Beispieldatei Foxisapi.ini mit den Standard-URLs gezeigt.

[FOXISAPI]
StatusURL = Status
ResetURL = Reset
SingleModeURL = SingleMode
MultiModeURL = MultiMode

Der folgende URL führt den Status-Befehl aus:

HTTP://MyServer/Scripts/Foxisapi.dll/Status

In der folgenden Beispieldatei Foxisapi.ini wird der URL für den Status-Befehl von Status in MyStatus geändert:

[FOXISAPI]
StatusURL = MyStatus
ResetURL = Reset
SingleModeURL = MSingleMode
MultiModeURL = MultiMode

Nach dieser Änderung von Foxisapi.ini führt der folgende URL den Status-Befehl aus:

HTTP://MyServer/Scripts/FoxISAPI.dll/MyStatus

Anmerkung   Nachdem Sie Änderungen an Foxisapi.ini vorgenommen haben, müssen Sie Foxisapi.dll mit dem Reset-Befehl zurücksetzen, damit diese Änderungen wirksam werden.

Weitere "FoxISAPI.ini"-Einstellungen

Foxisapi.dll liest Foxisapi.ini und konfiguriert ihre Einstellungen entsprechend den Einträgen in Foxisapi.ini. Die folgende Tabelle beschreibt jeden der zusätzlichen Einträge, die Sie in die Datei Foxisapi.ini aufnehmen können.

Element Beschreibung
AutoRefreshStatus Gibt die Anzahl der Sekunden zwischen Aktualisierungen der Statusseite an. Wenn dieser Eintrag fehlt oder Foxisapi.ini nicht vorhanden ist, beträgt der Vorgabewert 0 (die Statusseite wird nicht aktualisiert).
BusyTimeout Gibt die Anzahl der Sekunden an, für die Foxisapi.dll auf eine Antwort der Visual FoxPro-Anwendungsserver wartet, bevor eine Time-Out-Meldung erzeugt wird. Wenn dieser Eintrag fehlt oder Foxisapi.ini nicht vorhanden ist, beträgt der Standardwert 2 Sekunden.
ReleaseTimeout Gibt die Anzahl der Sekunden an, für die Foxisapi.dll auf eine Antwort von einem ausgelasteten Visual FoxPro-Anwendungsserver wartet, bevor der Reset-Befehl ausgeführt wird. Wenn dieser Eintrag fehlt oder Foxisapi.ini nicht vorhanden ist, beträgt der Standardwert 2 Sekunden.

Das folgende Beispiel aus einer Foxisapi.ini-Datei zeigt das Format der weiteren Einträge, die Sie in der Datei vornehmen können:

[FOXISAPI]
BusyTimeout = 5
ReleaseTimeout = 15

Anmerkung   Nachdem Sie Änderungen an Foxisapi.ini vorgenommen haben, müssen Sie Foxisapi.dll mit dem Reset-Befehl zurücksetzen, damit diese Änderungen wirksam werden.

Microsoft Internet Information Server-Konfigurationshinweise

Zwei Microsoft Internet Information Server-Registrierungseinträge, PoolThreadLimit und ThreadTimeout, können zur Registrierung hinzugefügt werden, um die Leistung von Visual FoxPro FoxISAPI-Automatisierungsservern zu optimieren. Diese Registrierungseinträge geben die Gesamtzahl der Threads an, die der Internet Information Server erzeugen kann, und die Dauer, für die die Threads vorhanden sind. Weitere Informationen über diese Registrierungseinträge finden Sie in der Dokumentation des Internet Information Servers.

Darüber hinaus wird ein Microsoft Knowledge Base-Artikel mit dem Titel "How to Launch Automation servers from ISAPI Extensions" (Nummer Q156223) unter www.microsoft.com zur Verfügung gestellt. Dieser Artikel enthält Informationen über Zugriffssicherheitsberechtigungen, die zum Starten von Automatisierungsservern, wie die Visual FoxPro-ISAPI-Automatisierungsserver, erforderlich sind.

Siehe auch

Lösungsbeispiele | Beispiele für FoxISAPI-Automatisierungsserver | FoxIs, ein Visual FoxPro-Internetserver