Меню

настройка iis для isapi

Как настроить сервер IIS для запуска ISAPI приложения?

Этот пост для тех, кто хочет узнать как настраивать IIS для работы ISAPI приложений и как их потом запускать. Предполагается, что ISAPI приложение уже создано и нам нужно только настроить IIS и запустить наше приложение на localhost

IISInternet Information Server – программа-сервер, от компании Microsoft (у меня на борту Windows 8.1 стояла версия IIS 8.5, единственное, нужно было её активировать).

Как настроить сервер IIS для запуска ISAPI приложения?

Теперь одна из самых важных вещей – настройка сервера IIS. Об этом я уже много и подробно писал в длинной и подробной статье “Delphi+UniGui. Пишем первый “Hello World” под WEB. Легко и просто”, поэтому в принципе, материал той статьи подойдет в большинстве своем и для этой статьи. Пэтому, часть того материала, я просто копирую.

Основные шаги по настройке IIS

Добавляем новый пул приложений

Назовем его, скажем, MyWebApps, версия среды – без управляемого кода, режим конвейера – встроенный. Делаем все как на картинке ниже

Включаем поддержку 32-разрядных приложений

Далее, настраиваем параметры перезапуска

Жмем Ок, выходим из этого окна.

Далее идем в сайты и добавляем новое приложение

Выбираем псевдоним, пул приложений, физический путь. Внимание, в этом месте вместо псевдонима MyWebApplication – поставьте myapp, чтобы пример выше из этого поста заработал.

Выбираем физический путь, например C:\WebAps

Далее, 2 раза кликаем на MyWebApplication на дереве слева

Далее, убеждаемся что ISAPI-dll находится в группе Enabled (Включен), если в группе Disabled (Выключен), то…

Далее
Далее, добавляем приложение в число разрешенных…

В итоге должно получиться так…

Как обратиться к ISAPI приложению в браузере?

Первый вариант – напрямую

Далее, можно попробовать открыть браузер и набрать в адресной строке

источник

Adding ISAPI/CGI Restrictions

Overview

Compatibility

Setup

The collection is available only after you install the CGI or ISAPI Extensions modules on your IIS 7 and later server. You cannot install it independent of those features.

Windows Server 2012 or Windows Server 2012 R2

  1. On the taskbar, click Server Manager.
  2. In Server Manager, click the Manage menu, and then click Add Roles and Features.
  3. In the Add Roles and Features wizard, click Next. Select the installation type and click Next. Select the destination server and click Next.
  4. On the Server Roles page, expand Web Server (IIS), expand Web Server, expand Application Deelopment, and then select CGI or ISAPI Extensions. Click Next.
    .
  5. On the Select features page, click Next.
  6. On the Confirm installation selections page, click Install.
  7. On the Results page, click Close.

Windows 8 or Windows 8.1

  1. On the Start screen, move the pointer all the way to the lower left corner, right-click the Start button, and then click Control Panel.
  2. In Control Panel, click Programs and Features, and then click Turn Windows features on or off.
  3. Expand Internet Information Services, expand World Wide Web Services, expand Application Development Features, and then select CGI or ISAPI Extensions.
  4. Click OK.
  5. Click Close.

Windows Server 2008 or Windows Server 2008 R2

  1. On the taskbar, click Start, point to Administrative Tools, and then click Server Manager.
  2. In the Server Manager hierarchy pane, expand Roles, and then click Web Server (IIS).
  3. In the Web Server (IIS) pane, scroll to the Role Services section, and then click Add Role Services.
  4. On the Select Role Services page of the Add Role Services Wizard, select CGI or ISAPI Extensions.
  5. If the Add role services dialog appears, click Add Required Role Services. (This page appears only if you have not already installed any prerequisite role services on your server.)
  6. On the Select Role Services page, click Next.
  7. On the Confirm Installation Selections page, click Install.
  8. On the Results page, click Close.

Windows Vista or Windows 7

  1. On the taskbar, click Start, and then click Control Panel.
  2. In Control Panel, click Programs and Features, and then click Turn Windows Features on or off.
  3. In the Windows Features dialog box, expand Internet Information Services, then World Wide Web Services, then Application Development Features.
  4. Select CGI or ISAPI Extensions, and then click OK.

How To

How to add an ISAPI or CGI restriction

Open Internet Information Services (IIS) Manager:

If you are using Windows Server 2012 or Windows Server 2012 R2:

  • On the taskbar, click Server Manager, click Tools, and then click Internet Information Services (IIS) Manager.

If you are using Windows 8 or Windows 8.1:

  • Hold down the Windows key, press the letter X, and then click Control Panel.
  • Click Administrative Tools, and then double-click Internet Information Services (IIS) Manager.

If you are using Windows Server 2008 or Windows Server 2008 R2:

  • On the taskbar, click Start, point to Administrative Tools, and then click Internet Information Services (IIS) Manager.

If you are using Windows Vista or Windows 7:

  • On the taskbar, click Start, and then click Control Panel.
  • Double-click Administrative Tools, and then double-click Internet Information Services (IIS) Manager.

In the Connections pane, click the server name.

In the Home pane, double-click ISAPI and CGI Restrictions.

In the Actions pane, click Add.

In the Add ISAPI or CGI Restriction dialog box, type the path to the binary you want to add in the ISAPI or CGI path box, type the description of the binary in the Description box, select the Allow extension path option to execute check box to allow the binary to run on the server, and then click OK.

Configuration

The collection can only be configured at the server level in the ApplicationHost.config file.

Attributes

Attribute Description
allowed Required Boolean attribute.

Specifies whether the restriction allows or denies a CGI or ISAPI module to run on the server.

See the Default Configuration section below for the complete list of default values. Description Optional string attribute.

Specifies the friendly description of the group associated with this groupID.

See the Default Configuration section below for the complete list of default values. groupId Optional string attribute.

Specifies the groupID of the application that has a dependency on an extension restriction.

See the Default Configuration section below for the complete list of default values. path Required string attribute.

Specifies the path to the CGI or ISAPI module in the file system of the server.

источник

Быстрейшая CMS на Delphi для IIS как ISAPI Extension

Почему вы пишите сайты на скриптах, вроде PHP? Я лично не понимаю. Я использую другой способ — ISAPI Extensions for IIS. Сейчас расскажу, почему.

ISAPI Extensions (расширения Web сервера) — простая DLL библиотека с парой функций, которые обрабатывают запрос пользователя к Web серверу и возвращают ответ. Точнее — одна функция, остальные служат для регистрации/разрегистрации DLL в рабочем процессе IIS.

Из этого следует, что, по сравнению с другими способами, такими, как скрипты, ISAPI Extensions выигрывают по:
1. Скорость работы. DLL загружается в рабочий процесс IIS и находится в памяти всегда, а не читается с диска при каждом обращении. Не требуется интерпретатор языка — код нативный и исполняется непосредственно процессором;
2. Функционал. Вы можете использовать любую другую DLL или любой вызов WinAPI. Теоретически возможно специально сформированным http запросом отформатировать флэшку;
3. Защищенность. Ваш код очень сложно проанализировать и понять, как взломать сайт — нативный код человеком плохо читается;
4. У вас есть нормальный отладчик во время разработки! Самый вкусный момент. Можете делать step-by-step trace, стэк и память доступны для анализа.

Есть и ложка дегтя, как и везде, хотя это сложно назвать недостатками:
1. Требуется IDE для разработки;
2. Невозможно просто взять и поправить 2 строчки в скрипте на сервере — требуется пересобрать проект, как любое Windows приложение;
3. Вероятность завалить рабочий процесс IIS с ошибкой Acceess violation at address (не бояться, он просто перезапустится);
4. Различные security violations, связанные с возможностью делать, что хочешь. Хотя, это уже точно вопрос к админам, как они раздадут права на сервере.
5. Ваши друзья — php кодеры вас не поймут и назовут дураком, если вы передадите им такую CMS. Еще они не смогут ее установить 😀

Итак, приступим к работе. На Delphi. Я буду использовать Delphi 2010 и IIS 6 под Windows Server 2003 R2 EnUS. Почему Делфи? В последнее время на хабре много пишут о том, что с этим языком что-то не так, а CMS подразумевает работу с базой данных, почтой и множеством текстовых строк (привет, TStringList). Вот и посмотрим, кто дурак.

Добрые Борландны, еще много лет тому назад, упростили процесс работы с ISAPI до предела. Чтобы начать выберем File -> New -> Other и выберите WebBooker -> Web Server Application. Далее кликаете ISAPI/NSAPI Dynamic Link Library и нажмите OK.

Вот и все, готова ваша ISAPI Extension. Пока она ничего не возвратит Web серверу конечно, но если ее откомпилировать она готова к работе.

Переключитесь на Unit1 и выберите Action Editor для объекта WebModule1. Об экшенах поговорим в другой раз, пока нужно просто создать default action, который будет обрабатывать все наши запросы.

Сделайте все, как на картинке и давайте уже двигаться дальше!

У этого экшена есть события, как вы уже догадались. А точнее — одно. Думаю, без картинки не заблудитесь и поймете, что надо сделать (если что, в конце поста есть ссылка на исходники).

Создадим новый класс — TWebEngine в файле WebEngineClass. Он будет у нас отвечать за все манипуляции с данными. Окружение — классы TOptions и TTempVariables. TOptions будут хранить данные о базе (с которой мы будем соединяться в следующий раз), а временные вариаблы — информацию о расположении DLL библиотеки на диске и ее имени.

Сервер Microsoft IIS передает нашей библиотеке множество параметров и хочет, чтобы мы ему что-то вернули после работы. Эти объекты представляются как Request: TWebRequest и Response: TWebResponse, которые прописаны как property класса TWebEngine. Просто передадим их в класс в коде экшена:

try
try
WebEngine.Request:= Request;
WebEngine.Response:= Response;

WebEngine.Process;
finally
WebEngine.Free;
end;
except
on E: Exception do
Response.Content:= ‘Internal error. Low lavel problem! ‘ + E.Message + ‘
Contact us noone@nowhere.com’;
end;

Логика кода, надеюсь, ясна — создать класс, передать параметры, запустить обработку (process) и удалить (free) класс. Если что — выдать ошибку.

Разъясняя код метода (да да, именно метода. Функции и процедуры одним словом называются метод) Process хочу в первую очередь указать на то, как разбирается для нас строка параметров http запроса вида

все параметры попадают в Request и могут быть оттуда легко получены вот так:

LocalOptions.Language:= Request.QueryFields.Values[ ‘language’ ];
LocalOptions.TypeOfPage:= Request.QueryFields.Values[ ‘pagename’ ];

То есть никаких шаманств не требуется, хотя возможны при желании!

Код метода Process устанавливает страницей по умолчанию страницу main с языком EnUS (код 1033) и запускает дальнейшую обработку:

// language
// default language is EnUS
LocalOptions.Language:= 1033; // EnUS

// other languagues
if AnsiSameText( Request.QueryFields.Values[ ‘language’ ], ‘En’ ) then
LocalOptions.Language:= 1033; // EnUS

if AnsiSameText( Request.QueryFields.Values[ ‘language’ ], ‘Ru’ ) then
LocalOptions.Language:= 1049; // RuRu

// type of page
// dafault is help page
if Length( Request.QueryFields.Values[ ‘pagename’ ]) UTF8
BufferUTF8String:= UTF8Encode( s );
// setting BOM
BOM[ 0 ]:= 239;
BOM[ 1 ]:= 187;
BOM[ 2 ]:= 191;

try
Stream:= TMemoryStream.Create;
except
on E: Exception do
Begin
LocalOptions.Response.Content:= ‘Error 0x1, TMemoryStream.Create @ TWebEngine.Send ‘ + E.Message;
Exit;
End;
end;

try
try
// writing BOM
Stream.Write( BOM, SizeOf( BOM ));
// writing content
Stream.Write( BufferUTF8String[ 1 ], Length( BufferUTF8String ));
Stream.Position:= 0;

// setting content type
LocalOptions.Response.ContentType:= ‘text/html; charset=UTF-8’;
LocalOptions.response.ContentEncoding:= ‘UTF-8’;

// sending
LocalOptions.Response.ContentStream:= Stream;
LocalOptions.Response.SendResponse;
finally
// DO NOT Stream.Free here!
end;
except
on E: Exception do
Begin
LocalOptions.Response.Content:= ‘Error 0x2 @ TWebEngine.Send ‘ + E.Message;
Exit;
End;
end;

Здесь происходит очень простая вещь — текст перекодируется, записывается в поток и отсылается, как массив байт. Пользователь видит страничку в UTF-8. Магия.

Еще, о чем можно поговорить это TPageProducer. Это замечательный класс, который преобразует тэги вида в шаблонах страницы на любой текст. Происходит это в PageProducerOnHTMLTag — вызывается каждый раз при нахождении такого тэга. Для примера я создал тэг #HeaderCopyright, код которого располагается в файле, и тэг #CopyrightYearsRange, который генерируется в самом ISAPI Extension. Посмотрите исходник, не буду останавливаться на этом моменте, он того не стоит.

Все, с кодом закончили. Самые важные аспекты я осветил, теперь как же запустить это все на отладку? Не как обычное приложение, зеленая кнопка тут бессильна (сперва). Для DLL нужен хост-процесс.

Сперва остановите все службы IIS: net stop IISAdmin в command prompt и Y что вы останавливаете дочерние службы.

Запустите IISAdmin, без дочерних служб: net start IISAdmin.

В Delphi, в свойствах проекта поставьте папку бинарников — папкой публикации IIS узла, включите debug symbols и вообще сделайте, как на картинках:


В самом IIS, если еще не сделали — страница по умолчанию index.dll, ISAPI Extension разрешить в Web Server Extensions и свойствах конкретного узла.

Теперь, по нажатию зеленой кнопки в Delphi запуститься хост-процесс IIS и заработает отладка. Вот, например, нет файла:

А вот что видет пользователь:

Самое вкусное — отладка работает, как в обычном Windows приложении! Всем php разработчикам — завидовать.

Удачи вам, это все, на первый раз. Далее поговорим о соединении с базой данных из ISAPI Extensions.

Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.

источник

Читайте также:  ipsec mikrotik juniper настройка