Можно ли сдавать один и тот же тест несколько раз? |
Серверные приложения
Таблица описания команд
Для таблицы описания команд в 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.