FoxWeb представляет собой образец упрощенного сервера автоматизации ISAPI, разработанный для быстрого создания Web сайта и его запуска. FoxWeb предоставляет собой новую версию Foxisapi.dll (также поставляемую с образцом сервера Visual FoxPro FoxIs ). Foxisapi.dll теперь может управлять множеством экземпляров серверов автоматизации Visual FoxPro и предоставляет дополнительные методы отладка для приложений Visual FoxPro, разрабатываемых для Internet.
Сервер автоматизации FoxWeb
Образце FoxWeb использует простой класс сервера Visual FoxPro, предназначенного для демонстрации базового использования сервера, запущенного под FoxISAPI. Весь код хранится в файле с именем FoxWeb.prg. Этот файл содержит класс с именем Server, который определен, как OLEPUBLIC, поэтому он может быть при сборке зарегистрирован в виде СОМ компоненты сервера автоматизации. Этот класс подвергается обработке FoxISAPI и содержит ряд методов, которые могут быть вызваны (например, методы Hello и Delay) так, как показано ниже. Эти методы иллюстрируют структуры, которые требуются для FoxISAPI для корректного функционирования.
Файлы образца FoxWeb
Файлы для нового образца сервера автоматизации Visual FoxPro FoxWeb размещены в каталоге Visual FoxPro ...\Samples\Servers\Foxisapi\FoxWeb.
Установка сервера автоматизации FoxWeb
В приведенных ниже разделах описывается, как использовать Visual FoxPro для быстрого создания Web-сайта и его запуска с FoxWeb.
Регистрация сервера автоматизации Visual FoxPro FoxWeb
Серверы автоматизации Visual FoxPro, которые возвращают HTML должны быть зарегистрированы. Регистрация производится автоматически, если ваш .exe или .dll был собран с помощью диспетчера проекта (Project Manager) Visual FoxPro или собран с помощью команд BUILD EXE, BUILD DLL или BUILD MTDLL. Например, если вы откроете проект FoxWeb, поставляемый вместе с образцом FoxWeb в диспетчере проекта, вы сможете выбрать Build для создания сервера автоматизации в виде файлов in-process .dll или out-of-process .exe. Отметьте, что регистрация произойдет автоматически только на той машине, на которой файл был собран.
Сервер автоматизации Visual FoxPro, собранный в виде out-of-process .exe может быть, кроме того, зарегистрирован указанием имени сервера автоматизации с включением ключа /RegServer. Например, приведенная ниже команда регистрирует сервер автоматизации Visual FoxPro FoxWeb:
![]() | |
---|---|
FoxWeb.exe /RegServer |
Если сервер автоматизации Visual FoxPro был собран в виде in-process .dll, то он, кроме того, может быть зарегистрирован с помощью Regsvr32.exe. Например, приведенная ниже команда регистрирует сервер автоматизации Visual FoxPro FoxWeb:
![]() | |
---|---|
Regsvr32 FoxWeb.dll |
![]() |
---|
Если ваш сервер автоматизации Visual FoxPro ISAPI использует дополнительные файлы, такие как .gif или .jpg files, убедитесь в том, что эти файлы размещены в каталогах, к которым может обращаться Microsoft Internet Information Services (IIS) или Microsoft Personal Web Server. |
Использование вашего Web обозревателя для доступа к серверу автоматизации Visual FoxPro ISAPI
Сервер автоматизации Visual FoxPro ISAPI доступен из вашего Web обозревателя (browser) с помощью универсального локатора ресурса URL . Web обозреватель формирует HTTP запрос к Microsoft IIS или к Microsoft Personal Web Server. Сервер автоматизации посылает запрос библиотеке Foxisapi.dll, которая, в свою очередь, посылает запрос вашему серверу автоматизации.
Например, представленный ниже URL обращается к серверу автоматизации ISAPI, который именован как FoxWeb.Server:
![]() | |
---|---|
HTTP://MyServer/Scripts/Foxisapi.dll/FoxWeb.server.Delay?30 |
В приведенной ниже таблице описывается каждый элемент представленного выше примера URL.
Элемент URL | Описание |
---|---|
Myserver |
Виртуальный каталог IIS или Personal Web Server. |
Scripts/Foxisapi.dll |
Каталог скриптов IIS или Microsoft Personal Web Server, а также Foxisapi.dll. |
FoxWeb.Server |
Зарегистрированное имя (ProgID) вызываемого сервера автоматизации Visual FoxPro ISAPI. В этом примере, FoxWeb представляет собой имя файла .exe или .dll Visual FoxPro сервера автоматизации. Server представляет собой класс, указанный в опции OLEPUBLIC команды DEFINE CLASS, которая создает сервер автоматизации. FoxWeb.Server, кроме того является программным идентификатором - ProgID - для сервера автоматизации, так, как он хранится в реестре Windows. Вы можете использовать RegEdit для просмотра или изменения ProgID сервера автоматизации. |
Delay |
Имя метода, исполняемого на сервере автоматизации Visual FoxPro ISAPI. |
?30 |
Параметр, посылаемый методу. Знак вопрос представляет собой разделитель, который указывает, что за ним следует параметр. Для этого метода, 30 определяет, что исполнение будет задержано на 30 секунт. Параметр посылается как строка символов. |
Пересылка параметров в методы
Приведенный ниже код взят из метода Delay в FoxWeb.prg, и демонстрирует структуру для исполнения метода на серверах автоматизации Visual FoxPro ISAPI.
![]() | |
---|---|
PROCEDURE Delay LPARAMETERS cParm1, cIniFile, nPersistInstance *** Здесь должен размещаться ваш код *** RETURN AnHTMLString ENDPROC |
- cParm1
-
Символьная строка, посланная методу. В методе Delay этот параметр определяет число секунд, на которое будет задержано исполнение.
- cIniFile
-
Имя файла .ini (посылаемого методу со стороны Foxisapi.dll), создаваемого каждый раз при обращении к серверу автоматизации Visual FoxPro ISAPI. Какждый .ini файл создается в каталоге Scripts и имеет уникальное имя, которое начинается с префикса "Fox." Вы можете использовать функцию GetPrivateProfileString в FoxWeb.prg, например, для чтения информации из .ini файла и возврата пользовательского HTML, основанного на конфигурации пользователя.
- nPersistInstance
-
Определяет - будет экземпляр сервера автоматизации Visual FoxPro ISAPI сохраняться после завершения исполнения вашего метода. nPersistInstance посылается методу по ссылке со стороны Foxisapi.dll. Если nPersistInstance в вашем Web приложении установлено в 0, то экземпляр сервера автоматизации останется в наличии после завершения исполнения метода. Если же значение nPersistInstance отличается от 0, то тогда экземпляр сервера автоматизации высвобождается из памяти. Для оптимальной производительности, nPersistInstance должен быть установлен в 0, в противном случае при следующем вызове сервер автоматизации будет запускаться заново.
Использование Foxisapi.dll для пула серверов автоматизации
Поскольку Foxisapi.dll является free-threaded, он может собирать в пул множество серверов автоматизации Visual FoxPro ISAPI для обеспечения лучшей расширяемости ваших Web приложений. Серверы автоматизации, собранные в пул позволяют свободному серверу автоматизации ISAPI обслужить запрос, когда заняты другие серверы автоматизации ISAPI. Для обеспечения преимуществ пула серверов автоматизации ISAPI , экземпляры серверов автоматизации должны существовать, что обеспечивается в вашем Web приложении с помощью установки nPersistInstance в 0.
Число серверов автоматизации серверов автоматизаци ISAPI, доступных для обслуживания запросов, определяется установками в вашем инициализационном файла Foxisapi.ini. Для создания пула множества серверов автоматизации ISAPI, включите в файл инициализации ввод с именем сервера автоматизации, заключенный в квадратные скобки, для которого будет создаваться пул серверов. За этим вводом должен следовать список серверов автоматизации ISAPI, которые составят пул, с численным значением, указывающим максимальное число экземпляров каждого сервера автоматизации, которое может быть создано.
Например, поместив приведенные ниже строки в Foxisap.ini вы создадите пол из семи серверов автоматизации ISAPI для обслуживания запросов к FoxWeb.myserver. Foxisapi.dll может создать до четырех экземпляров FoxWeb.server серверов автоматизации ISAPI и до трех экземлпяров FoxWeb2.server серверов автоматизации ISAPI для обслуживания запросов.
![]() | |
---|---|
[FOXWEB.MYSERVER] FOXWEB.SERVER=4 FOXWEB2.SERVER=3 |
Приведенный ниже URL исполнит метод Delay либо на экземпляре FoxWeb.server, либо на экземпляре FoxWeb2.server сервера автоматизации ISAPI:
![]() | |
---|---|
HTTP://MyServer/Scripts/Foxisapi.dll/FoxWeb.Myserver.Delay?30 |
Foxisapi.ini может указать, что серверы автоматизации ISAPI инициируются до получения запроса на обслуживание. Чтобы сделать это, добавьте после числа, указывающего число экземлпяров точку и звездочку так, как показано в приведенном ниже примере.
![]() | |
---|---|
[FOXWEB.MYSERVER] FOXWEB.SERVER=4,* FOXWEB2.SERVER=3,* |
Использование диспетчера пула на множестве машин
Foxisapi.dll предоставляет возможность управлять серверами автоматизации Visual FoxPro ISAPI на множестве машин. Вы можете использовать Remote Automation или DCOM (Distributed Component Object Model) для доступа к серверам автоматизации ISAPI. Отметьте, что для оптимальной производительности и масштаблируемости экземпляры серверов автоматизации ISAPI должны буть сделаны постоянно существующими с помощью установки nPersistInstance в 0 в вашем Web приложении.
Приведенный ниже пример описывает сценарий, в котором два сервера автоматизации Visual FoxPro ISAPI, FoxWeb и FoxWeb2, размещены на двух машинах.
Machine_A представляет собой локальную машину, на которой запущены Windows 98, DCOM и Personal Web Server. Machine_B представляет собой удаленную машину, доступную через сеть, на которой запущены Windows 2000 и DCOM.
-
Machine_A является вашей машиной разработчика Visual FoxPro, на которой вы проинсталлировали образцы сервера автоматизации Visual FoxPro FoxISAPI. На этой машине откройте в диспетчере проекта Visual FoxPro проект FoxWeb и выберите Build для создания сервера автоматизации ISAPI в виде out-of-process .exe файла. Сборка .exe автоматически зарегистриррет сервер автоматизации ISAPI на машине, как FoxWeb.exe. Теперь откройте проект FoxWeb2 в диспетечере проекта Visual FoxPro и выберите Build для создания и регистрации другого сервера автоматизации ISAPI в виде .exe файла.
-
Для того, чтобы убедиться в том, что серверы автоматизации ISAPI FoxWeb и FoxWeb2 зарегистрированы должным образом, вы можете использоватьRegEdit и поискать FoxWeb и FoxWeb2. Отметьте, что программные идентификаторы ProgID для серверов зарегистрированы, соответственно, как FoxWeb.Server и FoxWeb2.Server. Server представляет собой имя класса, определенное в опции OLEPUBLIC команды DEFINE CLASS, которая создает сервер автоматизации ISAPI. FoxWeb.prg представляет собой Internet приложение Visual FoxPro, включенное в оба проекта - FoxWeb и FoxWeb2.
ProgID для обоих серверов автоматизации ISAPI указывают на Machine_A, то есть на локальную машину. Установки регистра для сервера автоматизации FoxWeb2 ISAPI необходимо изменить так, чтобы она указывала на Machine_B, то есть на удаленную машину.
-
Теперь скопируйте файлы FoxWeb2.exe, FoxWeb2.vbr и FoxWeb2.tlb с локальной машины Machine_A на удаленную машину to Machine_B.
-
Используйте опцию /RegServer для регистрации FoxWeb2.exe на Machine_B в MS-DOS командной строке:
Скопировать код
C:\VFP\FOXWEB2.EXE /RegServer
-
И, наконец, остановите и перезапустите Personal Web Server на Machine_A, чтобы были учтены изменения в регистре.
Вы можете использовать команду Status на Foxisapi.dll для проверки статуса серверов автоматизации ISAPI, зарегистрированных в Foxisapi.ini. Команду Status исполняет приведенный ниже URL:
![]() | |
---|---|
HTTP://Machine_A/Scripts/FoxISAPI.dll/Status |
Теперь вы можете исполнить команду Reset на Foxisapi.dll для сброса всех серверов автоматизации ISAPI, зарегистрированных в Foxisapi.ini. Команда Reset высвобождает из памяти все экземлпяры серверов автоматизации ISAPI. Команду Reset исполняет приведенный ниже URL:
![]() | |
---|---|
HTTP://Machine_A/Scripts/FoxISAPI.dll/Reset |
Для тестирования инсталляции, вы можете открыть столько экземпляров вашего Web обозревателя, сколько серверов автоматизации ISAPI находится в пуле серверов. Web обозреватели могут быть открыты на множестве машин, подключенных к вашей сети. Затем вы можете вызвать метод Delay в строке URL каждого из Web обозервателей с тем, чтобы Foxisapi.dll направил запросы на обслуживание к другим свободным серверам автоматизации ISAPI. После того, как метод Delay будет исполнен из каждого Web обозревателя, вы можете использовать метод Status с целью проверки - все ли серверы автоматизации в пуле получили запросы на обслуживание.
Использование FoxISAPI с DLL серверами
Если вы используете FoxISAPI с многопоточными in-process серверами в предыдущих версиях Visual FoxPro, вам необхоидмо запретить поддержку диспетчера пула в FoxISAPI. Вы можете сделать это с помощью установки PoolMode в файле FoxIsapi.ini. Установка PoolMode представляет собой глобальную установку для всех серверов, поэтому мы рекомендуем, чтобы вы не допускали единого сервиса FoxIsapi.dll для EXE и DLL серверов одновременно. Вместо этого, вы должны скопировать и переименовать файлы FoxIsapi.dll и FoxIsapi.ini для того, чтобы у вас был один набор для EXE серверов и один набор для DLL серверов.
Отладка ваших серверов автоматизации ISAPI
FoxIsapi.dll, кроме того, позволяет вам отлаживать ваши сервера автоматизации ISAPI на вашей локальной машине. Установите число экземпляров сервера автоматизации ISAPI , которые вы желаете отлаживать в 0 так, как это показано в приведенном ниже примере файла FoxIsapi.ini:
![]() | |
---|---|
[FOXWEB.MYSERVER] FOXWEB.SERVER=0 |
Программный файл Odebug.prg должен находиться в вашем корневом каталоге Visual FoxPro и исходные файлы сервера автоматизации ISAPI должны иметься в наличии. Убедитесь, что сервер автоматизации ISAPI, который вы желаете отлаживать, сконфигурирован как постоянно существующий сервер автоматизации ISAPI, а информация об отладке включена в проекте, содержащем исходные файлы вашего сервера автоматизации ISAPI.
Когда будет создан экземпляр сервера автоматизации ISAPI, Foxisapi.dll запустит Visual FoxPro для отладки, позволяя вам установить точки останова, трассировку кода и тому подобное.
Команды Foxisapi.dll
Foxisapi.dll имеет команды, которые вы можете вызывать для определения состояния ваших серверов автоматизации ISAPI и для сброса серверов. В приведенной ниже таблице перечислены команды Foxisapi.dll с описанием каждой из них.
Команда | Описание |
---|---|
MultiMode |
Исполняет команду Reset, затем ограничивает число экземпляров серверов автоматизации ISAPI значением, указанным в Foxisapi.ini. |
PoolMode |
Разрешает или запрщает поддержку диспетчера пула в FoxISAPI. Используйте эту команду для отключения диспетчера пула для in-process DLL серверов. 0 – запрещает 1 - разрешает (по умолчанию) |
Reset |
Высвобождает все экземпляры серверов автоматизации ISAPI. |
SingleMode |
Исполняет команду Reset, затем ограничивает число экземпляров серверов автоматизации ISAPI до одного экземпляра. Исполняйте эту команду для проведения обслуживания; например, вы можете открыть таблицы монопольно, когда включен режим SingleMode. |
Status |
Отображает текущее состояние серверов автоматизации ISAPI, установки Foxisapi.ini и какой режим включен - SingleMode или MultiMode. |
Каждая из команд Foxisapi.dll вызывается с помощью URL, который указан в Foxisapi.ini. Приведенное ниже представляет собой содержание файла Foxisapi.ini образца с URL-ми, определенными по умолчанию:
![]() | |
---|---|
[FOXISAPI] StatusURL = Status ResetURL = Reset SingleModeURL = SingleMode MultiModeURL = MultiMode |
Приведенный ниже URL исполняет команду Status:
![]() | |
---|---|
HTTP://MyServer/Scripts/Foxisapi.dll/Status |
В приведенном ниже образце файла Foxisapi.ini, URL для команды Status изменен из Status в MyStatus:
![]() | |
---|---|
[FOXISAPI] StatusURL = MyStatus ResetURL = Reset SingleModeURL = MSingleMode MultiModeURL = MultiMode |
После этого изменения в Foxisapi.ini, приведенный ниже URL исполняет команду Status:
![]() | |
---|---|
HTTP://MyServer/Scripts/FoxISAPI.dll/MyStatus |
![]() |
---|
Вы можете сбросить Foxisapi.dll с помощью команды Reset, после того, как вы сделали изменения в файле Foxisapi.ini для того, чтобы изменения были учтены. |
Дополнительные установки FoxISAPI.ini
Foxisapi.dll читает Foxisapi.ini и конфигурирует свои установки в соответствии с размещенными в Foxisapi.ini элементами. В приведенной ниже таблице описана каждая из дополнительных установок, которая может быть помещена в ваш файл Foxisapi.ini.
Элемент | Описание |
---|---|
AutoRefreshStatus |
Определяет число секунд между обновлениями страницы Status. По умолчанию равна 0 секундам (страница Status не обновляется) если этот элемент опущен или если Foxisapi.ini отсутствует. |
BusyTimeout |
Определяет число секунд, в течении которых Foxisapi.dll ожидает ответа серверов приложения Visual FoxPro до генерации сообщения о превышении лимита времени. По умолчанию равно 2 секундам, если этот элемент опущен или если Foxisapi.ini отсутствует. |
ReleaseTimeout |
Определяет число секунд в течении которых Foxisapi.dll ожидает ответа серверов приложения Visual FoxPro до исполнения команды Reset. По умолчанию равно 2 секундам, если этот элемент опущен или если Foxisapi.ini отсутствует. |
Приведенное ниже взято из файла образца Foxisapi.ini и демонстрирует формы дополнительных элементов, которые могут быть помещены в файа инициализации:
![]() | |
---|---|
[FOXISAPI] BusyTimeout = 5 ReleaseTimeout = 15 |
![]() |
---|
Вы можете сбросить Foxisapi.dll с помощью команды Reset после того, как вы сделали изменения в файле Foxisapi.ini, для того, чтобы эти изменения вступили в силу. |
Советы по конфигурации для Microsoft Internet Information Services (IIS)
В ваш реестр могут быть добавлены два входа для Microsoft IIS, PoolThreadLimit и ThreadTimeout, с помощью которых можно улучшить производительность серверов автоматизации Visual FoxPro FoxISAPI. Эти входы реестра определяют общее число потоков, которые может создать Internet Information Services а также время их существования. Для получения более подробной информации об этих установках реестра, обратитесь к документации по Internet Information Services.
Статья базы знаний Microsoft с названием "How to Launch Automation servers from ISAPI Extensions" (number Q156223) доступна на сайте www.microsoft.com. Эта статья предоставляет информацию об установках разрешений безопасности для досупа, требуемых для запуска серверов автоматизации, таких как Visual FoxPro ISAPI.