Вопрос, поднятый в данной теме, касается разработки ISAPI-расширений для веб-сервера IIS на языке программирования Delphi. В частности, рассматривается проблема получения URL сайта в контексте функции GetExtensionVersion, которая используется для инициализации ресурсов в момент первого обращения к веб-приложению.
Описание проблемы
Разработчик столкнулся с необходимостью инициализации ресурсов в ISAPI-расширении, созданном с использованием Delphi XE SPI для сервера Windows Server 2008 R2 с IIS 7.5. Функция GetExtensionVersion предназначена для выполнения инициализации, не связанной с каждым отдельным клиентским запросом, и вызывается IIS только один раз при первом обращении к DLL. Однако, в контексте этой функции нет прямого доступа к URL сайта, где размещено расширение.
Решение проблемы
Поскольку GetExtensionVersion вызывается до начала обработки клиентских запросов, информация о сайте, на котором размещено расширение, не доступна напрямую. Однако, существует два основных подхода к решению задачи:
Использование IIS Admin API для получения информации о сайтах, для которых используется DLL. Этот метод требует дополнительных привилегий и может быть избыточным с точки зрения безопасности.
Вызов функции GetModuleFileName с использованием глобальной переменной HInstance, доступной в DLL, и чтение конфигурационных файлов в директории, где размещена DLL. Этот метод предполагает, что в директории с DLL находится текстовый файл с URL сайта, и в функции GetExtensionVersion можно извлечь этот файл и прочитать необходимую информацию.
Пример кода
uses
Winapi;
function GetModuleFileName(hModule: HMODULE; var lpFilename: PChar; nSize: DWORD): BOOL; stdcall;
function ChopUpPath(const Path: PChar): string;
var
ModuleFileName: array[0..MAX_PATH] of Char;
URLFileName: string;
begin
if GetModuleFileName(hModule, ModuleFileName, SizeOf(ModuleFileName)) then
begin
URLFileName := ChopUpPath(ModuleFileName);
URLFileName := URLFileName + 'url.txt';
// Чтение файла с URL и дальнейшие действия
end;
end;
function ChopUpPath(const Path: PChar): string;
begin
// Реализация функции для обработки пути к файлу DLL
// ...
end;
Заключение
В данном случае разработчик решил использовать второй подход, поместив текстовый файл с URL в директорию вместе с DLL и извлекая его в функции GetExtensionVersion. Это решение оказалось простым и надежным, не требующим взаимодействия с IIS Admin API.
Таким образом, разработчикам, сталкивающимся с подобными задачами, следует рассмотреть возможность использования дополнительных конфигурационных файлов в директории с DLL, что позволит избежать необходимости работы с IIS Admin API и упростит процесс получения информации о сайте.
Разработчик ISAPI-расширения для IIS на Delphi столкнулся с задачей получения URL сайта в функции `GetExtensionVersion` для инициализации ресурсов.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.