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:

 CopyCode imageСкопировать код
FoxWeb.exe /RegServer

Если  сервер автоматизации Visual FoxPro был собран в виде in-process .dll, то он, кроме того, может быть зарегистрирован с помощью Regsvr32.exe. Например, приведенная ниже команда регистрирует сервер автоматизации Visual FoxPro FoxWeb:

 CopyCode imageСкопировать код
Regsvr32 FoxWeb.dll
NoteЗамечание

Если ваш сервер автоматизации 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:

 CopyCode imageСкопировать код
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.

 CopyCode imageСкопировать код
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 для обслуживания запросов.

 CopyCode imageСкопировать код
[FOXWEB.MYSERVER]
FOXWEB.SERVER=4
FOXWEB2.SERVER=3

Приведенный ниже URL исполнит метод Delay либо на экземпляре FoxWeb.server, либо на экземпляре FoxWeb2.server сервера автоматизации ISAPI:

 CopyCode imageСкопировать код
HTTP://MyServer/Scripts/Foxisapi.dll/FoxWeb.Myserver.Delay?30

Foxisapi.ini может указать, что серверы автоматизации ISAPI инициируются до получения запроса на обслуживание. Чтобы сделать это, добавьте после числа, указывающего число экземлпяров точку и звездочку так, как показано в приведенном ниже примере.

 CopyCode imageСкопировать код
[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.

  1. 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 файла.

  2. Для того, чтобы убедиться в том, что серверы автоматизации 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, то есть на удаленную машину.

  3. Теперь скопируйте файлы FoxWeb2.exe, FoxWeb2.vbr и FoxWeb2.tlb с локальной машины Machine_A на удаленную машину to Machine_B.

  4. Используйте опцию  /RegServer для регистрации FoxWeb2.exe на Machine_B в MS-DOS командной строке:

     CopyCode imageСкопировать код
    C:\VFP\FOXWEB2.EXE /RegServer
  5. И, наконец, остановите и перезапустите Personal Web Server на Machine_A, чтобы были учтены изменения в регистре.

Вы можете использовать команду Status на Foxisapi.dll для проверки статуса серверов автоматизации ISAPI, зарегистрированных в Foxisapi.ini. Команду Status исполняет приведенный ниже URL:

 CopyCode imageСкопировать код
HTTP://Machine_A/Scripts/FoxISAPI.dll/Status

Теперь вы можете исполнить команду Reset на Foxisapi.dll для сброса всех серверов автоматизации ISAPI, зарегистрированных в Foxisapi.ini. Команда Reset высвобождает из памяти все экземлпяры серверов автоматизации ISAPI. Команду Reset исполняет приведенный ниже URL:

 CopyCode imageСкопировать код
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:

 CopyCode imageСкопировать код
[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-ми, определенными по умолчанию:

 CopyCode imageСкопировать код
[FOXISAPI]
StatusURL = Status
ResetURL = Reset
SingleModeURL = SingleMode
MultiModeURL = MultiMode

Приведенный ниже URL исполняет команду Status:

 CopyCode imageСкопировать код
HTTP://MyServer/Scripts/Foxisapi.dll/Status

В приведенном ниже образце файла Foxisapi.ini, URL для команды Status изменен из Status в MyStatus:

 CopyCode imageСкопировать код
[FOXISAPI]
StatusURL = MyStatus
ResetURL = Reset
SingleModeURL = MSingleMode
MultiModeURL = MultiMode

После этого изменения в Foxisapi.ini, приведенный ниже URL исполняет команду Status:

 CopyCode imageСкопировать код
HTTP://MyServer/Scripts/FoxISAPI.dll/MyStatus
NoteЗамечание

Вы можете сбросить 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 и демонстрирует формы дополнительных элементов, которые могут быть помещены в файа инициализации:

 CopyCode imageСкопировать код
[FOXISAPI]
BusyTimeout = 5
ReleaseTimeout = 15
NoteЗамечание

Вы можете сбросить 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.

Смотрите также