Сервер ATL
Сервер ATL представляет собой набор классов, являющихся частью пакета Microsoft Visual Studio .NET и предназначенных для использования в контексте интернета. Классы применяются при разработке веб-приложений на C++. Когда компания Microsoft решила выпустить технологию ASP.NET, начальным решением стал компонент ATL Server. Многие возможности веб-форм и веб-служб ASP.NET представляют собой урезанные версии функциональности, присутствующей в классах ATL Server. В дополнение к классам веб-служб ATL Server предлагает разработчику классы, осуществляющие контроль над использованием памяти, управление сеансами, кэширование ресурсов и управление нитями запросов IIS и HTTP. ATL Server включает множество новых классов, связанных с управлением файлами, ранее они были не доступны разработчикам, использующим ISAPI. ATL Server предоставляет команды по управлению программными решениями для интернета, обеспечивает простоту и удобный доступ к соответствующим классам.
ATL Server считается хорошим расширение для ISAPI. Так же, как Active Template Library (ATL) разработанная в помощь программисту при взаимодействии с Microsoft Foundation Classes (MFC) и интерфейсом программирования Windows (API), ATL Server помогает при работе с IIS API или ISAPI. С помощью ATL Server разработчики создают программные решения для интернета с управлением через технологию .NET либо без всякого управления. ATL Server содержит множество опций, контролирующих взаимодействие с IIS, которые не доступны в языках C# и Visual Basic. ATL Server является прекрасной альтернативой непосредственного использования ISAPI, так как многие классы ATL Server разработчику пришлось бы создавать вручную при работе с ISAPI.
Обзор архитектуры ATL Server
ATL Server связывает классы и функции, хранящиеся в DLL, используя теги в текстовых файлах. В результате этого запросы к IIS могут вызывать функции внутри библиотек и возвращать запрашивающему клиенту содержимое текстового файла вместе с результатами вызова функции. ATL Server использует ISAPI для реализации механизма вызова между текстовыми файлами, IIS и библиотеками DLL с использованием системы командных тегов, поддерживаемой технологией .NET. Простейшее программное решение ATL Server включает в себя следующие компоненты.
- Библиотека DLL расширения ISAPI.
- Библиотека DLL интернет-приложения или DLL поддержки запросов.
- Файл ответа сервера (SRF).
- Службы IIS.
При отправке запросов в IIS на ресурс, которым является источник ATL Server, IIS связывает вызов с библиотекой DLL расширения ISAPI. После получения этого запроса расширение ISAPI открывает и обрабатывает библиотеку DLL запрошенного веб-приложения или файл ответа сервера. Если запрошен файл ответа сервера, то вызывается тег замещения, обозначающий вызов функции из библиотеки DLL веб-приложения, и результаты работы вставляются в файл ответа сервера в месте расположения тега замещения. Комбинация результатов вызовов к DLL веб-приложения и содержимое файла ответа сервера возвращаются запрашивавшей стороне. Если DLL веб-приложения запрашивается напрямую, библиотека DLL расширения ISAPI выполняет соответствующий вызов (вызовы) и возвращает результаты в браузер.
На рисунке 4.1 приведен обзор архитектуры ATL Server.
Так как библиотека DLL расширения ISAPI может располагаться на несущем сервере не в корневом веб-каталоге, то IIS нужно знать, какие действия выполнять с файлом расширения ISAPI и файлами, связанными с библиотекой DLL расширения ISAPI (файлами ответа сервера и DLL веб-приложения). Чтобы сравнить программное решение для интернета, требующее текстовых файлов для обработки расширением ISAPI, мы будем использовать технологию ASP и противопоставим ее механизму IIS для связи файлов и расширения ISAPI. IIS известно, как обрабатывать файлы ASP, поскольку имена файлов, оканчивающиеся на .asp обрабатываются с помощью расширения ISAPI с именем ASP.DLL.
Код внутри ASP.DLL открывает связанный ASP-файл и интерпретирует код в тегах ASP. Веб-формы и веб-службы, работающие с файлами .aspx и .asmx, используют такой же механизм, только они применяют технологию .NET вместо ASP.DLL для интерпретации кода и тегов, содержащихся в соответствующих файлах.
ATL Server с помощью библиотек DLL расширения ISAPI интерпретирует код, включенный в теги файла ответа сервера, и вызовы функций, определенные тегами замещения в библиотеке DLL веб-приложения. При создании веб-приложения с использованием файлов ASP разработчик ни в коем случае не станет перекомпилировать ASP.DLL таким образом, чтобы она содержала только код для обработки функций ASP. ASP.DLL не изменяется от одного ASP-приложения к другому; по существу, именно за счет этого работает одна библиотека DLL расширения ISAPI. Имейте в виду, что ATL Server создает особый интерпретатор для строящегося программного решения, оптимизированный именно для этого решения. Он также является библиотекой DLL расширения ISAPI, которая входит в проект ATL Server. Разработчик имеет прекрасную возможность модифицировать ее в соответствии с требованиями конкретного приложения, а не использовать конфигурацию по умолчанию.
Для использования службами IIS библиотеки расширения ISAPI файлы ответа сервера и файлы библиотеки DLL приложения необходимо связать с соответствующей библиотекой расширения ISAPI, аналогично тому, как файлы с расширениями .asp связаны с библиотекой ASP.DLL или файлы с расширениями .aspx связаны с интерпретатором технологии .NET aspnet_isapi.dll. Расширение имен файлов ответов сервера .srf и расширение .dll DLL-библиотек веб-приложения должны быть связаны с соответствующей DLL-библиотекой расширения ISAPI.
Ниже показано, как можно связать расширения имен файлов с расширениями ISAPI.
- Откройте консоль MMC для IIS.
- Щелкните на значке папки Web Site (Веб-узел) в дереве папок, чтобы развернуть список экземпляров веб-сервера на сервере, затем щелкните на экземпляре веб-сайта, который необходимо настроить, для отображения его содержимого.
- Откройте окно свойств для любого веб-объекта или виртуального каталога и нажмите на кнопку Configuration (Настройка) во вкладке Home Directory (Домашний каталог) или Virtual Directory (Виртуальный каталог) соответственно. Откроется апплет Application Configuration (Настройка приложения) (см. рис. 4.2).
- Свяжите файл и путь к нужной DLL-библиотеке расширения ISAPI на сайте. После этого IIS необходимо перезапустить.
Расположение DLL-библиотеки веб-приложения, используемой файлом ответа сервера, определяется в самом файле ответа сервера. Она должна находиться в корне виртуального каталога. Файл ответа сервера содержит тег обработчика, определяющий относительное расположение этой библиотеки. (Для получения более подробной информации о тегах обработчика обратитесь к разделу "Файлы ответа сервера".) Когда в IIS направляется HTTP-запрос на файлы ответа сервера или библиотеку DLL веб-приложения, IIS с помощью связей файлов определяет, где искать эту библиотеку для обработки и интерпретации запроса.
Ни одна из задействованных библиотек не является DLL-библиотекой модели компонентных объектов (COM), поэтому IIS и компоненты ATL Server для поиска нужных DLL-библиотек физически отыскивают их на узле по текущим файловым расположениям.
Многие из разработчиков знают, что расположение COM-объекта на узле определяется связыванием уникального идентификационного номера (CLSID) с путем к файлу DLL. Эта информация записывается в реестр Windows, и любое программное обеспечение, запрашивающее использование DLL-библиотеки COM- объекта, сможет работать с ней. Доступ к DLL с помощью ее физического нахождения и загрузки выглядит несколько устаревшим по сравнении с архитектурой, появившейся после технологии COM, но такое решение дает некоторые преимущества с точки зрения управления. Связи с файлами в IIS базируются на файловых расширениях. DLL-библиотека веб-приложения указывается посредством относительного пути. Перемещение файлов на другой сервер нарушает связи файлов IIS с DLL-библиотекой расширения ISAPI, но другие файлы перемещаются так, как если бы они являлись статическим содержимым, поскольку их расположение относительно друг друга контролируется.