![]() |
+7 (495) 229-0436 | ![]() |
shopadmin@itshop.ru | 119334, г. Москва, ул. Бардина, д. 4, корп. 3 | ![]() |
![]() |
![]() |
|
|
IIS 7.0 Построение решений веб-сервера с использованием сквозной расширяемости22.12.2009 15:51
Веб-платформа IIS 7.0 поддерживает большее число технологий инфраструктуры приложений для размещения многофункциональных приложений, чем любая предыдущая версия IIS, она буквально напичкана функциями, которые можно использовать для развертывания этих приложений сразу же после установки. Однако в то же время вы видите (в установке Windows®) не обязательно то, что всегда получаете.
Расширение веб-сервераМодульная архитектура IIS 7.0 предоставляет возможность полностью перестроить веб-сервер под требуемую рабочую нагрузку. Зачастую это может быть выполнено просто путем установки только тех функций, которые необходимы для вашего приложения, в результате чего появляется веб-сервер с урезанной функциональностью, позволяющей делать только то, что необходимо, и ничего более.
Это позволяет использовать одинаково по всему веб-узлу такие многосторонние функции ASP.NET, как проверка подлинности на основе форм, элементы управления входом в систему и служба членства. Для более подробного изучения того, как объединенный режим ASP.NET может быть использован с целью повышения функциональных возможностей приложений, написанных не для платформы ASP.NET, прочтите мою статью в январском номере журнала MSDN® Magazine за 2008 год, расположенную по адресу: msdn.microsoft.com/msdnmag/issues/08/01/PHPandIIS7.
Модуль изменения ответаОбъединенный конвейер ASP.NET дает возможность модулям ASP.NET выполнять широкий спектр задач в ходе обработки каждого запроса. Этот спектр содержит все, начиная от задач проверки подлинности или авторизации и до изменения исходящих ответов перед их отправкой клиенту. class ResponseModificationModule : IHttpModule { public void Init(HttpApplication app) { // Wire up the filter in PreRequestHandlerExecute app.PreRequestHandlerExecute += new EventHandler(OnPreRequestHandlerExecute); } public void OnPreRequestHandlerExecute( Object source, EventArgs e) { ... } } По существу, модуль подписывается на событие PreRequestHandlerExecute, которое происходит всякий раз перед выполнением обработчика запроса. Метод OnPreRequestHandlerExecute используется для чтения сведений настройки с целью определить, имеет ли ответ какие-нибудь применимые для него правила замены (подробнее о настройке - далее в этой статье), и в случае наличия таковых регистрировать поток фильтра ответов, который затем будет использован для фильтрации исходящих ответов, как показано на рис. 2. public void OnPreRequestHandlerExecute(Object source, EventArgs e) { HttpApplication app = (HttpApplication)source; HttpContext context = app.Context; // Read configuration ResponseModificationConfigurationSection config; ... // Get the list of filters ResponseFilterList filters = GetApplicableFilters(context, config); // Create the filter and wire it up if (null != filters && filters.Count > 0) { context.Response.Filter = new ChainedBufferedStringResponseFilter( context, filters); } } Фильтрация ответов выполняется внутри класса ChainedBufferedStringResponseFilter, который отвечает за преобразование байтов ответов в строку при помощи набора символов ответов, а также за вызов одного или несколько фильтров ответов, которые применимы к данному запросу. Модуль связывает фильтр с ответом путем установки свойства HttpResponse.Filter. Это свойство принимает все объекты, порожденные от абстрактного класса System.IO.Stream, и позднее использует их для фильтрации тела экземпняра исходящего ответа.
Расширение настройкиНовая система настройки является основой для большого числа основных вариантов развертывания и управления, возможных для платформы IIS 7.0. Вместо того, чтобы быть машинно-ориентированным зранилищем настройки закрытого формата, система настройки IIS 7.0 основана на структурированных файлах настройки формата XML, располагающихся в тех же файлах настройки, используемых системой настройки ASP.NET. Более того, синтаксис данных настройки IIS идентичен синатксису данных настройки ASP.NET; эти данные могут быть совместно записаны в распространяемые файлы web.config, с которыми разработчики ASP.NET очень хорошо знакомы. <sectionSchema name="system.webServer/defaultDocument"> <attribute name="enabled" type="bool" defaultValue="true" /> <element name="files"> <collection addElement="add" clearElement="clear" removeElement="remove" mergeAppend="false"> <attribute name="value" type="string" isUniqueKey="true"/> </collection> </element> </sectionSchema> Такая схема определяет все элементы и атрибуты, которые составляют раздел настройки, их типы и дополнительные сведения, такие как определения коллекций и характер проверки атрибутов. Для получения дополнительных сведений о синтаксисе и определениях схем см. комментарии в заголовке файла настройки IIS_Schema.xml.
Настройка модуля изменения ответаМодуль изменения ответа требует наличия собственного раздела настройки для настройки ряда специальных параметров, в том числе сведений о том, какие правила фильтрации применимы для данного приложения. Чтобы предоставить возможность использовать этот раздел в файлах настройки IIS, в первую очередь необходимо создать файл схемы, который описывал бы структуру раздела (см. рис. 3). Этот файл определяет раздел responseModification и его структуру, включая необходимые атрибуты и коллекцию правил фильтрации, которые могут настраиваться для вызова различных фильтров с дополнительной информацией о том, что и чем должно заменяться. <configSchema> <sectionSchema name="responseModification"> <attribute name="enabled" type="bool" defaultValue="false" /> <collection addElement="add" clearElement="clear" removeElement="remove"> <attribute name="name" type="string" required="true" isUniqueKey="true" validationType="nonEmptyString" /> <attribute name="conditionType" type="string" required="false" /> <attribute name="condition" type="string" required="false" /> <attribute name="replaceType" type="string" required="true" validationType="nonEmptyString" /> <attribute name="replace" type="string" required="false" /> <attribute name="replaceWith" type="string" required="false" /> <attribute name="options" type="string" required="false" /> </collection> </sectionSchema> </configSchema> Для установки этого раздела настройки необходимо сделать две вещи. Во-первых, скопируйте файл responsemod_schema.xml, содержащий сведения о схеме раздела, в папку %windir%\system32\inetsrv\config\schema. Затем объявите раздел настройки в основном файле настройки сервера, applicationHost.config. Последняя задача потребует написания некоторого кода, если вы пожелаете выполнить эту установку с помощью программы. IisSchema.exe /install responsemod_schema.xml После того как схема раздела настройки установлена, а сам раздел объявлен в файле applicationHost.config, можно начать использовать его для определения данных настройки модуля. %windir%\system32\inetsrv\AppCmd Set Config "Default Web Site/" /section:responseModification /enabled:true Кроме того, я могу добавить в раздел настройки responseModification коллекцию правил: %windir%\system32\inetsrv\AppCmd Set Config "Default Web Site/" "/+[name='StripWhitespace',replaceType= 'Mvolo.ResponseModification.Filters.HtmlDeflate']" Если теперь вы откроете файл web.config в корневой папке веб-узла по умолчанию (обычно это %windir%\inetpub\wwwroot), вы обнаружите следующий код: <configuration> <responseModification enabled="true"> <add name="StripWhitespace" replaceType="Mvolo.ResponseModification.Filters.HtmlDeflate" /> </responseModification> </configuration> Если вы исправили файл приложения web.config с целью изменения данных настройки модуля, а затем загрузили его на сервер, приложение будет настроено таким образом, чтобы использовать эти новые параметры. Точно так же, если вы загрузили приложение на другой сервер, на котором установлен раздел настройки, вы можете быть уверены, что данное приложение будет использовать нужные параметры без необходимости перенастройки его на этом сервере. ConfigurationSection section = WebConfigurationManager.GetSection( context, "responseModification"); bool enabled = (bool)section["enabled"]; Класс WebConfigurationManager в пространстве имен Microsoft.Web.Administration почти идентичен WebConfigurationManager в пространстве имен System.Web.Configuration и призван заменить последний для работы с управляемыми модулями IIS 7.0, выполняющими чтение настройки IIS 7.0. Метод GetSection выбирает объект раздела настройки по пути, указанному в текущем запросе HTTP.
Строго типизированный класс настройкиОбъект ConfigurationSection предоставляет нестрого типизированный доступ к любому разделу настройки, не требуя написания дополнительного кода. Можно получить доступ ко включенному атрибуту путем простого извлечения его имени в индексаторе объекта раздела и приведения его к ожидаемому типу. class ResponseModificationSection : ConfigurationSection { public bool Enabled { get { return (bool)this["enabled"]; } set { this["enabled"] = value; } } public ResponseModificationRuleCollection FilterRules { get { return (ResponseModificationRuleCollection) GetCollection(typeof(ResponseModificationRuleCollection)); } } } Как видно из реализации свойства Enabled, обертывание атрибутов настройки является достаточно простым. Обертывание дочерних элементов и коллекций требует последующей реализации классов оберток, наследуемых соответственно из ConfigurationElement и ConfigurationCollection (не показаны), точно таких же, как сама обертка раздела. ResponseModificationSection section = (ResponseModificationSection)WebConfigurationManager.GetSection( context, "responseModification", typeof(ResponseModificationSection) ); bool enabled = section.Enabled; Подобным образом можно получить безопасный относительно типов доступ к коллекции правил изменения ответов и свойствам каждого элемента правил. Это значительно упрощает программирование по сравнению с разделами настройки и сокращает количество ошибок безопасности типов, которые являются довольно частыми в случае нестрого типизированного доступа к данным. Кроме того, поскольку весь код, используемый для доступа к нижележащим данным, создается автоматически с помощью служебной программы, можете настроить программу Visual Studio для автоматического построения классов оберток из файла схемы настройки при очередной компиляции проекта. Это делает управление изменениями, вносимыми в схему раздела настройки, чрезвычайно простым.
Расширение IIS ManagerИтак, я уже показал, как создать модуль изменения ответа и позволить ему читать специальный раздел настройки, который управляет его поведением. Эта настройка может храниться в тех же файлах настройки, что содержат оставшиеся данные настройки IIS, может развертываться вместе с приложением в файлах web.config, а также может обрабатываться с помощью различных программных средств и интерфейсов API, в том числе AppCmd.exe и Microsoft.Web.Administration.
Создание службыКлиентские и серверные компоненты обычно выполнены в виде двух отдельных сборок .NET, которые не ссылаются друг на друга. Обмен данными между клиентскими и серверными компонентами осуществляется посредством абстракции ModuleServiceProxy диспетчера IIS, которая использует для обмена информацией набор нестрого типизированных свойств и основных типов .NET. public sealed class ResponseModificationModuleProvider : ConfigurationModuleProvider { public override Type ServiceType { get { return typeof(ResponseModificationModuleService); } } public override ModuleDefinition GetModuleDefinition(IManagementContext context) { return new ModuleDefinition(Name, "Mvolo.ResponseModification.UI.Client.ResponseModificationModule,"+ "Mvolo.ResponseModificationUI.Client," + "Version=1.0.0.0, Culture=neutral," + "PublicKeyToken=309ac0e1b5482072"); } protected override string ConfigurationSectionName { get { return "responseModification"; } } } Класс ResponseModificationModuleService порождается от класса ConfigurationModuleProvider, который предоставляет встроенную поддержку для управления функциями делегирования диспетчера IIS, основанными на состоянии делегирования нижележащего раздела настройки. Все, что нужно сделать, - указать имя раздела настройки, responseModification, и диспетчер IIS автоматически переключит состояние делегирования функций в зависимости от того, заблокирован или разблокирован этот раздел для отдельных путей настройки. Инфраструктура Microsoft.Web.Management предоставляет несколько других базовых классов ModuleProvider, которые поддерживают немного другие случаи делегирования для средства диспетчера IIS. public sealed class ResponseModificationModuleService : ModuleService { [ModuleServiceMethod] public ArrayList GetFilterRules() { ArrayList items = new ArrayList(); ResponseModificationSection section = (ResponseModificationSection)ManagementUnit.Configuration .GetSection("responseModification", typeof(ResponseModificationSection)); foreach (ResponseModificationRuleElement rule in section.Rules) { items.Add(GetPropertyBag(rule)); } return items; } ... } Метод GetFilterRules является примером использования нескольких методов службой, выполняющей задачи управления с использованием системы настройки, а также других ресурсов, локальных для сервера. Экземпляр службы всегда создается на сервере, так что он постоянно работает на локальных ресурсах, поэтому нет необходимости волноваться о раздельном доступе к ресурсам в случае удаленного администрирования. Обратите внимание на то, что я снова использую интерфейс API Microsoft.Web.Administration для доступа к разделу настройки responseModification, при этом использую строго типизированную обертку ResponseModificationConfigurationSection, созданную для обеспечения доступа модуля к настройке. Создание страницы модуля public sealed class ResponseModificationModule : Module { protected override void Initialize(IServiceProvider serviceProvider, ModuleInfo moduleInfo) { base.Initialize(serviceProvider, moduleInfo); IControlPanel controlPanel = (IControlPanel)GetService(typeof(IControlPanel)); controlPanel.RegisterPage( new ModulePageInfo(this, typeof(ResponseModificationModulePage), Resources.PageTitle, Resources.PageDescription, null, null, Resources.PageText )); } } Каждая реализация модуля создается однократно за время управляющего подключения, выоплненного диспетчером IIS, она ответственна за регистрацию всех страниц управления и элементов пользовательского интерфейса, необходимых для данного подключения. ResponseModificationModule регистрирует класс ResponseModificationModulePage, который определяет содержимое управляющей страницы.
Затем я создал перечень действий, показанный в правом окне, позволяющий добавлять, изменять и удалять правила изменения ответов. При создании этого перечня задач я использовал возможности класса Microsoft.Web.Management.Client.TaskList (см. правую панель на рис. 8). public sealed class ResponseModificationModuleServiceProxy : ModuleServiceProxy { public ArrayList GetFilterRules() { return (ArrayList)Invoke("GetFilterRules"); } public void AddFilterRule(PropertyBag bag) { Invoke("AddFilterRule", bag); } ... } Диспетчер IIS автоматически передает вызовы, сделанные к классу прокси службы модулей, на связанную службу модуля по каналу обмена данными, который может представлять собой локальный канал совместно используемой памяти или канал https на удаленный сервер.
Развертывание расширенияПри развертывании расширения диспетчера IIS учтите, что нужно зарегистрировать тип поставщика модуля в файле настройки диспетчера IIS на сервере (%windir%\system32\inetsrv\config\administration.config). Настройка, показанная на рис. 9, регистрирует поставщик модуля и предоставляет возможность использовать его на всех веб-узлах по умолчанию. Заметим, что и клиентская, и серверная сборки, образующие расширение, Mvolo.ResponseModificationUI.Server.dll и Mvolo.ResponseModificationUI.Client.dll, должны быть зарегистрированы в глобальном кэше сборок (GAC) и, следовательно, должны иметь строгое имя и подпись. Это требование, позволяющее выполнить установку расширений диспетчера IIS. <moduleProviders> ... <!-- Mvolo ResponseModification --> <add name="ResponseModification" type="Mvolo.ResponseModification.UI.Server .ResponseModificationModuleProvider, Mvolo.ResponseModificationUI.Server, Version=1.0.0.0, Culture=neutral, PublicKeyToken=895e90205a14f2aa, processorArchitecture=MSIL" /> </moduleProviders> <!-- For all Sites --> <location path="."> <modules> ... <add name="ResponseModification" /> </modules> </location> Когда диспетчер IIS используется для удаленного управления сервером, он автоматически предложит пользователю загрузить клиентскую сборку вне зависимости от того, есть она уже или еще нет (это происходит при управлении IIS 7.0 на Windows Server 2008 клиентом Windows Vista SP1, Windows XP или Windows Server 2003 с использованием удаленного диспетчера IIS, который доступен по адресу: iis.net/ downloads/?tabid=34&g=6&i=1524). Прежде чем начать установку, убедитесь в том, что доверяете как серверу, к которому подключились, так и издателю расширения диспетчера IIS, поскольку в противном случае это может привести к запуску на вашем компьютере вредоносного кода с полномочиями вашей учетной записи.
Окончательная сборкаПосле развертывания модуля и установки схемы раздела настройки и расширения диспетчера IIS функция изменения ответа готова к использованию. Теперь можно применять эту функцию к любому приложению на вашем сервере и настраивать его с помощью любой программы настройки или интерфейсов API IIS 7.0. <responseModification enabled="true"> <add name="Header" conditionType= "Mvolo.ResponseModification.Conditions.ContentTypeCondition" condition="text/html" replaceType="Mvolo.ResponseModification.Filters.RegExReplace" replace="<body([^>]*)>" replaceWith="<body$1><h1 align="center"> Welcome to my gallery!</h1>" options="IgnoreCase" /> <add name="Footer" conditionType= "Mvolo.ResponseModification.Conditions.ContentTypeCondition" condition="text/html" replaceType="Mvolo.ResponseModification.Filters.RegExReplace" replace="</body>" replaceWith="<h3 align="center"> Copyright mvolo 2007</h3></body>" options="IgnoreCase" /> </responseModification>
Модуль изменения ответов может быть также использован для выполнения любого количества пользовательских вставок, подстановок гиперссылок и других схем изменения ответов с помощью фильтров замен. Эти фильтры могут быть развернуты глобально или вместе с приложением и настроены с помощью правил настройки в разделе настройки responseModification.
Создавайте самиИмеется не так много полезных способов использования функции изменения ответа, а именно всякий раз, когда невозможно добиться такого же результата путем изменения исходного кода приложения (что всегда более эффективно, чем изменение ответа "на лету"). Например, я всегда использую ее для внедрения небольшого сценария в ответы формата HTML, изменяющего теги изображений для использования вариантов изображений с высокой степенью сжатия и затем "на лету" заменяющего их вариснатми более высокого качества, в результате обеспечивается более быстрый обзор при использовании медленных клиентов. При этом также используется обработчик изображений, который позволяет получить изображения формата JPEG с любой требуемой степенью сжатия для статических изображений с помощью интерфейсов API компонента работы с изображениями Microsoft Windows. На рис. 11 показан результат работы, включая верхний и нижний колонтитулы и предварительно загруженные изображения с низким разрешением (перед тем, как они автоматически будут замещены качественными изображениями). Майк Володарский (Mike Volodarsky) является техническим руководителем программы в группе "Web Platform and Tools" корпорации Майкрософт. На протяжении последних четырех лет он руководил разработкой и созданием основной функциональности для ASP.NET 2.0 и IIS 7.0. В настоящее время его усилия сосредоточены на том, чтобы помочь пользователям использовать возможности этих технологий в среде Windows Server 2008. Ссылки по теме |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
О нас |
Интернет-магазин ITShop.ru предлагает широкий спектр услуг информационных технологий и ПО.
На протяжении многих лет интернет-магазин предлагает товары и услуги, ориентированные на бизнес-пользователей и специалистов по информационным технологиям. Хорошие отзывы постоянных клиентов и высокий уровень специалистов позволяет получить наивысший результат при совместной работе. В нашем магазине вы можете приобрести лицензионное ПО выбрав необходимое из широкого спектра и ассортимента по самым доступным ценам. Наши менеджеры любезно помогут определиться с выбором ПО, которое необходимо именно вам. Также мы проводим учебные курсы. Мы приглашаем к сотрудничеству учебные центры, организаторов семинаров и бизнес-тренингов, преподавателей. Сфера сотрудничества - продвижение бизнес-тренингов и курсов обучения по информационным технологиям.
|
119334, г. Москва, ул. Бардина, д. 4, корп. 3 +7 (495) 229-0436 shopadmin@itshop.ru |
|
© ООО "Interface Ltd." Продаем программное обеспечение с 1990 года |