|
Можно ли сдавать один и тот же тест несколько раз? |
Серверные приложения
Таблица описания команд
Для таблицы описания команд в MFC-библиотеку включены пять следующих макросов:
- BEGIN_PARSE_MAP - определяет начало таблицы описания команд и указывает класс функций членов и базовый класс.
- END_PARSE_MAP - определяет конец таблицы описания команд..
- ON_PARSE_COMMAND - идентифицирует команду и указывает соответствующую ей функцию.
- ON_PARSE_COMMAND_PARAMS - определяет список параметров обрабатываемой команды. Этот макрос должен следовать непосредственно за макросом ON_PARSE_COMMAND.
- DEFAULT_PARSE_COMMAND - определяет команду, используемую в том случае, если нет явного указания выполняемой команды.
Макрос ON_PARSE_COMMAND используется при определении команды для объекта класса CHttpServer (или наследуемого от него), поступающей от клиента, и имеет следующее описание:
ON_PARSE_COMMAND(FnName, mapClass, Args)
Параметры:
FnName - имя функции члена класса, а также и имя команды.
mapClass - имя класса указанной функции.
Args - указывает тип списка параметров и может принимать следующие значения
ITS_EMPTY - параметров нет;
ITS_PSTR - указатель на строку;
ITS_RAW - данные, предварительно не обрабатываемые. Используется в том случае, если список параметров HTTP-запроса может иметь различное число параметров;
ITS_I2 - значение типа short
ITS_I4 - значение типа long
ITS_R4 - значение типа float
ITS_R8 - значение типа double
ITS_I8 - значение типа 64-битовое integer
ITS_ARGLIST - указатель на объект типа CHttpArgList.
Например:
BEGIN_PARSE_MAP(CDerivedClass, CHttpServer)
DEFAULT_PARSE_COMMAND(Myfunc, CDerivedClass)
// Для запроса типа
// http://LOCALSERVER/MyISAPI_1.dll?Myfunc&string1&135
ON_PARSE_COMMAND(Myfunc, // Имя функции
CDerivedClass, // Имя класса
ITS_PSTR ITS_I2) // Список из двух параметров:
// указатель на строку, значение типа short
ON_PARSE_COMMAND_PARAMS("string integer=42")
// Для запроса с тремя параметрами
ON_PARSE_COMMAND(Myfunc2,
CDerivedClass,
ITS_PSTR ITS_I2 ITS_PSTR)
ON_PARSE_COMMAND_PARAMS("string integer string2='Default value'")
DEFAULT_PARSE_COMMAND(Myfunc3, CDerivedClass)
ON_PARSE_COMMAND(Myfunc3, CDerivedClass,
ITS_RAW) // Различное число параметров
END_PARSE_MAP(CDerivedClass)
// Функции, выполняемые для обработки команд
void Myfunc(CHttpServerContext* pCtxt, LPTSTR pszName, int nNumber)
{ } // Первый параметр стандартен для всех функций,
// обрабатывающих команды, тип второго и третьего
// параметра был указан в макросе ON_PARSE_COMMAND
void Myfunc2(CHttpServerContext* pCtxt, LPTSTR pszName,
int nNumber, LPTSTR pszTitle)
{ }
void CDerivedClass::Myfunc3( // Используется тип параметров
// ITS_RAW
CHttpServerContext* pCtxt,
void* pVoid, // pVoid - указатель на передаваемые данные
DWORD dwBytes) // dwBytes - количество переданных байтов данных
{ }
Листинг
28.2.
Разбор списка параметров
Для запросов типа http://LOCALSERVER/MyISAPI_2.dll?Myfunc&s1= 10&s2=35&c1=y можно использовать макрос с типом параметров ITS_ARGLIST :
ON_PARSE_COMMAND(Myfunc, CMyHttpServer, ITS_ARGLIST).
Далее для разбора такого списка параметров используется класс CHttpArgList.
Класс CHttpArgList представляет собой массив структур типа CHttpArg.
При этом данные доступны через объект CHttpArg.
Поле CHttpArg::m_pstrValue содержит значение параметра, а поле CHttpArg::m_pstrArg - имя параметра.
Например:
для строки http://localserver/my1.dll&Arg1=hockey&Arg2&Arg3=beer+nuts надо реализовать разбор параметров по следующей схеме.
Выполнение ISAPI-приложения
Для выполнения ISAPI-приложения соответствующую DLL-библиотеку следует поместить в каталог web-сервера. Таким сервером может быть Internet Information Server или любой другой web-сервер.
Для просмотра сведений о виртуальных каталогах web-сервера на панели инструментов следует выбрать пиктограмму Administrative Tools и открыть диалог для администрирования web -сервера.
Для IIS сервера следует выбрать пиктограмму Internet Information Services. Отображаемый далее диалог Internet Information Services (рис. 28.1) позволяет получать информацию и настраивать ISS сервер.
Для того, чтобы получить информацию о расположении домашнего каталога ISS-сервера, следует на панели, расположенной слева, выделить элемент Default Web Site и выполнить команду контекстного меню Properties.
В диалоге Default Web Site Properties на странице Home Directory в поле Local Path указано расположение домашнего каталога. Для того чтобы из данного каталога можно было загружать как HTML-файлы, так и DLL-файлы, значение поля Executable Permissions должно быть установлено равным Script and Executables.
После размещения ISAPI-приложения в домашнем каталоге web-сервера, это приложение можно выполнить в web-броузере, указав соответствующий URL-адрес.
При выполнении приложения на локальном компьютере в качестве имени сервера указывается LOCALHOST.
Например: http://LOCALHOST/MyISAPI_1.dll.
При размещении ISAPI-приложения на web -сервере имя приложения можно изменить. На рис. 28.2 приведен результат выполнения в web-браузере описанного выше ISAPI-приложения.
При первом выполнения ISAPI-приложения сервер загружает данную DLL. При всех последующих вызовах обращение происходит к уже загруженной DLL.


