|
Программирование >> Руководство по созданию web приложений
rilisBa ? Расширения CGI и ISAPI сервера Web 313 LPSH; LPSH; , . : LPSTF; . переменная PATH TRANSLATED DWOF.D П пнЕп! iiiihj даннвк, полученнвк от DWORD cbAvallable; тново блока даннвк LPBYTE , указатель на доступнвш блок даннвк размером cbAvallable байт LPSTR , тип принятвк даннвк Функция GetServerVarlable для получения значения переменнвк BOOL (WINAPI * LPSH; ... LPvoii) J IpciwSizi); ФуНКЦПЭ Sftt для П ЫПКП П ТПТнПВ BOOL (WIIIAPI * WLlteCllHntCHii III! LPVOID Buffer, LPDWC Функция ReadClient для получения даннвк от посетителя BOOL (WINAPI * ReadClient) (HCONN ConnID, LPVOID IpvBuffer, LPDWORD IpdwSlze); Вспоь для ВЫП ЛННПЯ р 1 личных Пр 1ЦПИ BOOL (WIIIAPI * DWO: LPDWipD Ipdii.lzH LPDWipD Рассмотрим отдельные поля структуры, представляющей большой интерес для разработчиков расширений ISAPI. I cbSize В самом начале структуры BLOCK находится поле cbSize, в которое при вызове расширения сервер записывает размер структуры в байтах. I clwVerslon Поле dwVersion содержит номер версии расширения ISAPI. Верхнее и нижнее значения номера версии можно получить при помощи макрокоманд .IIHORD и LOWORD соответственно. ConnID В поле ConnID сервер записывает идентификатор канала, созданного для расширения. Это поле нельзя ПoлedwПttpStatusCodeдoлжнoзaпoлнятьcяpacшиpeниeм ISAPI. Вам записать сюда результат завершения операции (код состояния В случае успеха в это ноле записывается 200 (как . в спецификации ПТТР). Поле - . предназначено для записи - о выполнении тран- в журнал сервера Web. Это сообщение указывается в виде текстовой строки, закрытой нулем. Размер строки в байтах не должен превыщать значения . У ЛЕМ. Поле IpszMethod заполняется сервером и содержит название метода передачи данных от удаленного пользователя серверу в виде текстовой строки, закрытой двоичным нулем. Расширения ISAPI используют те же самые методы, что и программы CGI - метод GET и метод POST. Проводя аналогию с программами CGI дальше, скажем, что поле IpszMethod эквивалентно переменной среды с именем nEijUE3T tlETHuD, создаваемой для программы CGI. IpszOucr vEtrinj Аналогично поле Ip szQueryString соответствует переменной среды с именем : В это поле записываются данные, принятые от пользователя методом GET. В поле IpszPatlilnfo записывается путь к программному фай- лу библиотеки DLL расширения ISAPI. Напомним, что аналогичная информация для программ CGI передавалась через среды с именем Это поле содержит физический путь к программному файлу библиотеки DLL ISAPI. Оно соответствует переменной среды с именем PATH TRANSLATED, создаваемой для программ CGI. В поле cbTotalBytes записывается общее . байт данных, которое необходимо получить от удаленного пользователя. Часть этих данных (размером не более 48 кб) считывается сервером автоматически. Эти данные будут сразу доступны, после того как функция Htt получит уп- равление. Остальные данные необходимо дочитать в цикле при помощи функции fleaclCIient, о которой мы еще . говорить. cbAvailable В поле cbAvailable записывается размер блока полученных автома- тически от браузера посетителя сервера. Как мы только что сказали, размер этого блока не может превышать 48 кб. Этого, однако, вполне достаточно для обработки данных, полученных от форм обычного размера. IpoData Указатель на область памяти, в которую записан сервером полученный от удаленного пользователя блок данных размером cbAvailable байт. Поле IpszContentTypecoдepжиттиппpинятыxдaнныx, например text/html . Глава 7. Расширения CGI и ISAPI сервера Web Помимо полей структура EXTENSION CONTROL BLOCK - указа- тели на функции. С помощью этих функций расширение ISAPI может выполнять различные операции, как прием данных от удаленного пользователя. Поле GetServerVarlable содержит указатель на функцию, средствами которой ISAPI может получить информацию,. . программам CGI через переменные среды. в поле WriteClient находится адрес функции, которую . ISAPI должно для отправки данных удаленному пользователю. Таким образом, вместо того чтобы записывать данные в стандартный поток вывода, как это делает программа ( (И, приложение 1SAPI посылает данные с помощью функции WriteClient. t neadCllent Посредством адрес которой передается в поле ReadClient, прило- жение может дочитать дополнительные данные, не поместившиеся в буфер предварительного чтения, имеющий адрес и размер, не превышающий 48 Кб. Аналогичную данных от пользователя выполняет программа CGI в случае применения метода передачи данных POST. Отличие заключается в том, что программа CGI получает данные стандартный поток ввода, а расширение ISAPI берет эти данные из буфера предварительного чтения и при необходимости дочитывает данные помощи функции ReadClient. I Serve;. Посредством . адрес которой передается через поле . . Function, расширение ISAPI может выполнять различные действия, такие, как посылка стандартного заголовка протокола HTTP и некоторые другие. При успешном завершении функция вернуть зна- чение ... а при ошибке - . . Соответ- константы определены в файле Получение данных расширением ISAPI Программа CGI получает данные из переменных среды и стандартного потока (вслучае :. ; метода доступа POST). Расширение ISAPI делает это по-другому. Функция HttpExtensionProc i указатель на структуру типа EXTEN- ROLBLOCK. Некоторые поля структуры заполняются сервером и должны использоваться для получения входных данных. Прежде всего это поле d, через которое передается метод, использованный для посылки данных (GET или POST), поле . в котором передаются параметры запуска расширения или данные при использовании метода GET, а также другие поля, описанные выше. Через структуру EXTENSIONCONTROLBLOCK адреса функций GctSer-. verVariable и ReadClient, специально предназначенных для ползчения данных от посетителя.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |