Asp компонент доступа к файлам


Содержание

Контроль доступа к файлам

Файлы – один из видов разделяемых ресурсов, доступ к которым ОС должна контролировать. Существуют и другие виды ресурсов, с которыми пользователи работают в режиме совместного использования: принтеры, модемы, графопостроители и т.п. Во всех этих случаях пользователи или процессы пытаются выполнить с разделяемым ресурсом определенные операции, а ОС должны решить, имеют ли пользователи на это право. Пользователи являются субъектами доступа, а разделяемые ресурсы – объектами. Пользователь осуществляет доступ к объектам не непосредственно, а c помощью прикладных процессов, которые запускаются от его имени.

Для каждого типа объекта существует набор операций, которые можно с ним выполнять. Система контроля доступа ОС должна предоставлять средства для задания прав пользователей по отношению к объектам дифференцированно по операциям.

В качестве субъектов доступа могут выступать как отдельные пользователи, так и группы пользователей. Объединение пользователей с одинаковыми правами в группу и задания прав доступа в целом для группы является одним из основных приемов администрирования в больших системах.

У каждого объекта доступа существует владелец. Владелец объекта имеет право выполнить с ним любые допустимые для данного объекта операции. Во многих ОС существует особый пользователь – администратор «superuser», который имеет все права по отношению к объектам системы, не обязательно являясь их владельцем. Эти права (полномочия) необходимы администратору для управления политикой доступа.

Различают два основных подхода к определению прав доступа [13].

  1. Избирательный доступ – ситуация, когда владелец объекта определяет допустимые операции с объектом. Этот подход называется также произвольным доступом, так как позволяет администратору и владельцам объекта определить права доступа произвольным образом, по их желанию. Однако администратор по умолчанию наделен всеми правами.
  2. Мандатный доступ (от mandatory – принудительный) – подход к определению прав доступа, при котором система (администратор) наделяет пользователя или группу определенными правами по отношению к каждому разделяемому ресурсу. В этом случае группы пользователей образуют строгую иерархию, причем каждая группа пользуется всеми правами группы более низкого уровня иерархии.

Мандатные системы доступа считаются более надежными, но менее гибкими. Обычно они применяются в системах с повышенными требованиями к защите информации.

Каждый пользователь (группа) имеет символьное имя, а также уникальный числовой идентификатор. При выполнении процедуры логического входа в систему пользователь сообщает свое символьное имя или пароль. Все идентификационные данные, а также сведения о вхождении пользователя в группы хранятся в специальном файле (UNIX) или базе данных (Windows NT).

Вход пользователя в систему порождает процесс – оболочку, который поддерживает диалог с пользователем и запускает для него другие процессы. Любой порождаемый процесс наследует идентификаторы пользователя и групп от процесса родителя.

В разных ОС для одних и тех же типов ресурсов может быть определен свой список дифференцируемых операций доступа. Для файловых объектов этот список может включить операции, которые рассмотрены выше.

Набор файловых операций может включать всего несколько укрупненных операций, например, для файлов и каталогов: читать, писать и выполнять.

Возможна комбинация двух подходов – детальный уровень и укрупненный. Например, в Windows NT/2000/2003 администратор работает на укрупненном уровне, а при желании может перейти на детальный.

В самом общем случае права доступа могут быть описаны матрицей прав доступа, в которой столбцы соответствуют всем файлам системы, а строки – всем пользователям. На пересечении строк и столбцов указываются разрешенные операции. Однако реально для тысяч и десятков тысяч файлов в системе пользоваться такой матрицей неудобно. Поэтому она хранится по частям, т.е. для каждого файла и каталога создается список управления доступом (Access Control List, ACL), в котором описываются права на выполнение операций пользователей и групп пользователей по отношению к этому файлу или каталогу. Список управления доступом является частью характеристик файла или каталога и хранится на диске в соответствующей области. Не все файловые системы поддерживают списки управления доступом, например, FAT не поддерживает, поскольку разрабатывалась для однопрограммной, однопользовательской ОС MS-DOS.

Обобщено формат списка управления доступом (ACL) можно представить в виде набора идентификаторов пользователей и групп пользователей, в котором для каждого идентификатора указывается набор разрешенных операций над объектом. Сам список ACL состоит из элементов управления доступом (Access Control Element, ACE), которые соответствуют одному идентификатору. Список ACL с добавлением идентификатора владельца называют характеристиками безопасности.

Рассмотрим организацию контроля доступа в ОС Windows NT/2000/XP. Система управления доступом в этой операционной системе отличается высокой степенью гибкости, которая достигается за счет большого разнообразия субъектов и объектов доступа и детализации операции доступа.

Для разделяемых ресурсов в Windows XP применяется общая модель объекта, которая содержит такие характеристики безопасности, как набор допустимых операций, идентификатор владельца, список управления доступом.

Проверки прав доступа для объектов любого типа выполняются централизованно с помощью монитора безопасности (Security Reference Monitor), работающего в привилегированном режиме.

Для системы безопасности Windows характерно большое количество различных встроенных (предопределенных) субъектов доступа – отдельных пользователей и групп (Administrator, System, Guest, группы Users, Administrators, Account, Operators и др.). Смысл этих встроенных пользователей и групп состоит в том, что они наделены определенными правами. Это облегчает работу администратора по созданию эффективной системы разграничения доступа. Во-первых, за счет того, что нового пользователя можно внести в какую-то группу. Во-вторых, можно добавлять (изымать) права встроенных групп. Наконец, можно создавать новые группы с уникальным набором прав.

Все объекты при создании снабжаются дескрипторами безопасности, содержащими список управления доступом и список пользователей и групп, имеющих доступ к данному объекту. Владелец объекта, обычно пользователь, который его создал, обладает возможностью изменять ACL объекта, чтобы позволить или не позволить другим осуществлять доступ к объекту. Он может выполнить требуемую операцию с объектом, став его владельцем (такая возможность предусмотрена), а затем как владелец получить полный набор разрешений. Однако вернуть владение предыдущему владельцу объекта администратор не может, поэтому пользователь всегда может узнать о том, что с его файлом (принтером и т.п.) работал администратор.

В Windows NT/2000/XP администратор может управлять доступом пользователей к каталогам и файлам только в разделах диска, в которых установлена файловая система NTFS. Разделы FAT не поддерживаются, так как в этой ФС у файлов и каталогов отсутствуют атрибуты для хранения списков управления доступом.

Разрешения в Windows бывают индивидуальные (специальные) и стандартные. Индивидуальные относятся к элементарным операциям над каталогами и файлами, а стандартные разрешения являются объединением нескольких индивидуальных разрешений. На рис. 7.23 и рис. 7.24 приведены шесть стандартных разрешений (элементарных операций), смысл которых отличается для каталогов и файлов.

Рис. 7.23. Стандартные разрешения для каталогов

Рис. 7.24. Стандартные разрешения для файлов

На рис. 7.25 показана возможность установки индивидуальных разрешений для файлов.

Рис. 7.25. Индивидуальные разрешения для файлов

Asp компонент доступа к файлам

Для определения пути хранения статических файлов в проекте используются два параметра ContentRoot и WebRoot . Статические файлы должны располагаться в каталоге ContentRoot/WebRoot . По умолчанию «ContentRoot» представляет каталог текущего проекта, а «WebRoot» по умолчанию представляет каталог wwwroot . То есть если использовать значения по умолчанию, то статические файлы следует располагать в папке «wwwroot», которая должна находиться в текущем проекте. Но естественно эти параметры можно переопределить.

В разных типах проектов ASP NET Core данная папка может уже быть по умолчанию в проекте, а может отсутствовать. Например, в проекте по типу Empty данная папка отсутствует, поэтому ее надо добавлять вручную.

Итак, возьмем проект по типу Empty и добавим в него новую папку wwwroot . Далее добавим в папку wwwroot новый файл index.html . Для его добавления нажмем на wwwroot правой кнопкой мыши и далее в контекстном меню выберем Add ->New Item . Затем в окне добавления нового элемента найдем шаблон для html-файлов:

Структура проекта после добавления папки и файла index.html:

Изменим код файла index.html, например, следующим образом:

Но чтобы приложение могло бы отдавать статические файлы клиенту, нам надо добавить в конвейер обработки запроса в методе Configure() класса Startup компонент m >UseStaticFiles() :

Теперь, если мы обратимся к добавленному файлу, например, по пути http://localhost:58666/index.html , то нам отобразится содержимое данной веб-страницы:

По всем остальным запросам браузер выводил бы строку «Hello World».

Если бы index.html находился бы в какой-то вложенной папке, например, в wwwroot/html/ , то для обращения мы можем использовать следующий запрос: http://localhost:58666/html/index.html

Изменение пути к статическим файлам

Что делать, если нас не устраивает стандартная папка wwwroot. И мы, к примеру, хотим, чтобы все статические файлы в проекте находились в папке static . Для этого добавим папку static в проект, и затем в ней определим какой-нибудь html-файл. Пусть он будет называться content.html :

Чтобы приложение восприняло эту папку, изменим код создания хоста в файле Program.cs:

Для объекта IWebHostBuilder определен метод UseWebRoot() , который позволяет переопределить папку.

И после этого мы также сможем обращаться к статическим файлам, только теперь они будут браться из папки static, а не из wwwroot.

Asp компонент доступа к файлам

Internet Information Services (US) — набор базовых служб Интернета, в состав которых входят: веб-сервер, FTP-сервер, SMTP-сервер, NNTP-сервер и ряд дополнительных служб. Службы IIS предоставляют множество новых возможностей, которые могут превратить систему Windows 2000 в мощную платформу для распределенных сетевых приложений. Службы IIS объединены при помощи стандартного интерфейса администрирования и общих методов управления.

Примечание В системе Windows 2000 аббревиатура «IIS» расшифровывается несколько иначе, чем в системах Windows NT, где она означала Internet Information Server. Теперь это Internet Information Services (Информационные службы Интернета). В первую очередь — из-за того, что Интернет-службы стали стандартными компонентами операционной системы (хотя и не все службы обязательно инсталлировать), и их функциональные возможности были значительно расширены.

Службы Internet Information Services (IIS)

Службы Internet Information Services имеют ряд основных возможностей, которые кратко описаны ниже.

Службы IIS базируются на сетевых стандартах. В Microsoft Internet Information Services реализован стандарт протокола HTTP 1.1, включая возможность применения команд PUT и DELETE, настройки сообщений об ошибках HTTP и поддержку пользовательских заголовков HTTP. Также имеется поддержка заголовков, несущих информацию об узле, при помощи которой можно создать несколько веб-узлов на одном компьютере под управлением Windows 2000 с одним адресом IP. Это полезно для поставщиков услуг Интернета и для реализации узлов корпоративных интрасетей.

Динамическое содержание. В IIS можно создавать сценарии, выполняющиеся на стороне сервера, и использовать компоненты для создания динамического содержания, независимого от браузера. Активные серверные страницы ASP обеспечивают удобную для применения альтернативу CGI и ISAPI, позволяя разработчикам информационного содержимого узлов применять в страницах HTML любые языки сценариев ActiveX или серверные компоненты. ASP обеспечивает доступ ко всем потокам запросов и ответов HTTP, поддерживает стандартные методы доступа к базам данных и возможность настройки содержания для различных браузеров.

Централизованное администрирование. Службы IIS управляются с пбмощью консоли управления Microsoft (MMC). Управление службами возможно при помощи оснастки ММС, запущенной на компьютере с Windows 2000 (рис. 22.1).

Безопасность. Secure Sockets Layer (SSL, Уровень защищенных сокетов) версии 3.0 обеспечивает безопасный способ обмена информацией между клиентом и сервером. В дополнение к механизмам шифрования предыдущих реализаций SSL, SSL 3.0 обеспечивает способ аутентификации клиента без необходимости его регистрации (login) на сервере US.

Рис 22.1. Оснастка Internet Information Services
Рис 22.2. Управление с помощью браузера — окно Internet Service Manager

В IIS клиентские сертификаты распространяются и на приложения ISAPI, и на страницы ASP таким образом, чтобы программисты могли отслеживать работу пользователей на узлах. В свою очередь, IIS может »отображать» клиентский сертификат на учетную запись пользователя Windows 2000 так, чтобы администратор мог управлять доступом к ресурсам системы, основываясь на клиентском сертификате.

Дополнительные средства администрирования. IIS содержат основанные на веб-интерфейсе инструменты администрирования, которые позволяют удаленно управлять сервером с помощью веб-браузера на различных платформах (рис. 22.2). В Windows 2000 пользовательским учетным записям можно давать ограниченные привилегии администрирования веб-узла, что помогает распределить административные задачи.

У веб-сервера, входящего в число служб IIS в Windows 2000, появилось много новых возможностей по сравнению с предыдущими версиями (Internet Information Server 4.0, входившим в состав Option Pack для Windows NT 4.0 и более ранними версиями IIS, поставлявшимися отдельно). Основные функциональные возможности, которые появились или были усовершенствованы в этой версии веб-сервера:

Публикация информации на сервере стала проще

Сжатие HTTP. Обеспечивает более компактную передачу страниц между веб-серверами и клиентами, которые поддерживают получение сжатой информации. Сжимает и кэширует статические файлы, и выполняет по требованию сжатие динамически сгенерированных файлов.

Распределенная поддержка авторских версий (Distributed Authoring and Versioning, DAV). Дает возможность авторам веб-страниц удаленно редактировать, перемещать или удалять файлы, изменять параметры файлов, каталоги и параметры каталогов на сервере при помощи административных утилит, работающих по протоколу HTTP.

Новые возможности ASP. В механизмах Active Server Pages (ASP, Активные серверные страницы) расширены старые возможности и появились новые которые повышают производительность и улучшают выполнение сценариев на стороне сервера (см. ниже).

Докачка по протоколу FTP. Теперь при получении файла по протоколу FTP можно производить повторную докачку с места, на котором был прерван предыдущий сеанс.

Мастер создания веб-узлов (New Web Site) и Мастер создания виртуальных каталогов (New Virtual Directory). Эти мастеры можно вызвать из оснастки управления IIS, они облегчают создание новых веб-узлов и виртуальных каталогов на сервере.

Улучшенная безопасность

Новые механизмы аутентификации. Предоставляют возможности по надежной аутентификации пользователей, подключенных через серверы-посредники (proxy) и брандмауэры (firewall).

Новые мастера безопасности, которые упрощают задачи администрирования сервера: ,.

  • Мастер сертификатов (Certificate Wizard). Упрощает задачи администрирования сертификатов — создание запросов на получение сертификатов и управление циклом жизни сертификата.
  • Мастер разрешений (Permissions wizard). Позволяет облегчить редактирование и конфигурирование доступа к веб-узлу — обеспечивает назначение политик доступа к виртуальным каталогам и файлам. Мастер разрешений может также отображать политику доступа к веб-узлу при помощи файловых разрешений NTFS.
  • Мастер CTL (CTL Wizard). Можно использовать этот мастер для настройки списков доверия сертификатов (Certificate Trust List, CTL).

CTL — список центров авторизации или поставщиков сертификатов (Certificate Authorities, СА), получивших доверие, для заданного каталога. CTL особенно полезен для поставщиков услуг Интернета (ISP), которые держат на своем сервере много веб-узлов клиентов и должны хранить различные утвержденные списки центров авторизации для каждого узла.

Стандарт безопасности Fortezza- В службах IIS поддерживается американский правительственный стандарт безопасности, обычно называемый Fortezza. Этот стандарт удовлетворяет архитектуре безопасности Defence Messaging System (Система передачи сообщений Министерства обороны), поддерживая механизм шифрования, который обеспечивает конфиденциальность сообщений, целостность, аутентификацию и управление доступом к сообщениям, компонентам и системам. Эти возможности могут быть реализованы при помощи программного обеспечения сервера, браузера, либо при помощи аппаратных средств — платы PCMCIA

Шлюзовое серверное шифрование (Server-Gated Cryptography, SGC). Это расширение протокола SSL, которое позволяет финансовым учреждениям, использующим службы IIS в экспортном варианте, применять мощное 128-разрядное шифрование. Возможности SGC встроены в службы IIS, однако, чтобы использовать SGC, требуется специальный сертификат SGC.

Безопасность Kerberos. Службы IIS полностью интегрированы с моделью безопасности Kerberos, реализованной в Microsoft Windows 2000.

Расширенные возможности администрирования

Учет процессов (process accounting). Предоставляет информацию о том, как веб-узлы расходуют ресурсы процессора сервера. Эта информация полезна для выявления узлов, непропорционально использующих ресурсы процессора (в том числе сценариев или процессов CGI, содержащих ошибки).

Ограничение процессов (process throttling). Ограничивается время, которое процессор тратит на обработку процессов ASP, приложений ISAPI или CGI для отдельных веб-узлов.

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

Выполнение сценариев, включенных в веб-страницы. При помощи ASP-страниц можно внедрять сценарии в страницы HTML и применять серверные компоненты ActiveX, чтобы реализовывать динамическую бизнес-логику на базе веб. Сценарии могут быть написаны на языке Microsoft Visual Basic, Scripting Edition, или на Microsoft JScript, а также на любом другом языке создания сценариев ActiveX, для которого имеется соответствующая поддержка в US (engine).
Доступ к базам данных. Если создаются и исполняются программы для доступа к базам данных, можно сделать эти программы более дружественными и более эффективными при помощи Microsoft Data Access Components (MDAC, Компоненты доступа к данным Microsoft), набора методов баз данных, интегрированных с IIS. Компоненты MDAC включают Microsoft Remote Data Service (RDS, Служба удаленных данных, ранее называвшаяся ADC), Microsoft ActiveX Data Objects (ADO, Объекты данных ActiveX), OLE DB и Open Database Connectivity (ODBC, Интерфейс открытого взаимодействия с базами данных). Кроме того, при помощи службы СОМ+, которая теперь включает все функциональные возможности, ранее поддерживаемые MTS (Microsoft Transaction Server, сервер транзакций Microsoft), можно структурировать взаимодействие с базами данных при помощи транзакций.

Примечание

Транзакции — это действия, состоящие из нескольких шагов, которые выполняются как единое целое и могут либо успешно завершиться, либо «откатиться» к исходному состоянию.
Управление группами страниц. При помощи Microsoft FrontPage Server Extensions (Серверные расширения для FrontPage) можно легко управлять группами страниц веб-узла. Встроенный анализатор содержания позволяет просматривать карту сервера в удобном для понимания визуальном формате, который облегчает управление файлами и связями.

Предоставление возможностей поиска. При помощи Службы индексирования (Indexing Service) можно создавать настраиваемые формы, которые предоставляют возможность поиска информации на веб-страницах или в других файлах веб-узла. Служба индексирования индексирует текстовое содержимое документов, хранящихся на сервере, на котором работает IIS, а также их свойства. Пользователи могут посылать поисковые запросы из любого браузера, заполняя простую форму.

Возможности для администраторов. Для администраторов информационных служб HS обеспечивает эффективное выполнение следующих действий:

Установка веб- и FTP-узлов. Можно устанавливать, конфигурировать и управлять веб- и FTP-узлами средствами оснастки Internet Information Services, графического интерфейса для администрирования служб IIS. Можно конфигурировать каждый узел и каталог по-своему, даже в случае использования нескольких узлов на одном сервере; имеются средства установки некоторых конфигурационных параметров (например, разрешения доступа), которые применяются даже на уровне конкретных файлов.
Автоматизация типовых задач администрирования. Можно создавать сценарии для выполнения всех задач администрирования IIS, разделив их на более простые процедуры. Эти задачи включают добавление или изменение веб-узлов, добавление групп, изменение разрешений доступа и управление регистрацией.
Защита узла. Службы IIS позволяют настраивать ряд параметров безопасности, используя встроенные в Windows 2000 механизмы безопасности, например учетные записи пользователей и средства безопасности файловой системы NTFS 5.0. Службы IIS имеют дополнительные возможности по обеспечению безопасности, включая блокирование доступа (блокирование попыток, сделанных с заданных IP-адресов) и безопасную связь между компьютерами с помощью SSL. В поставку ‘Windows 2000 включен Сервер сертификатов (Microsoft Certificate Server), который может выдавать сертификаты серверу или клиенту.
Регистрация действий и настройка производительности сервера. Оснастки Системный монитор (System Monitor) и Просмотр событий (Event Viewer) .позволяют отслеживать работу сервера. Также в IIS используется собственное протоколирование, которое фиксирует все заданные действия. При помощи различных встроенных средств можно анализировать журналы и поведение сервера ” принимать решения. Можно настраивать производительность сервера при помощи административных инструментов и установок IIS. Также можно улучшать производительность сервера, используя возможности, перечисленные ниже в разделе «Возможности для разработчиков сценариев» данной главы.
Поддержка диалоговой обработки запросов. При помощи технологий СОМ+ можно группировать компоненты (дискретные модули кода) в пакеты, которые используют специальную среду для выполнения в виде транзакций. В новой версии IIS внутри транзакций можно выполнять не только приложения, но и сценарии. Те функции, что ранее поддерживались MTS, теперь полностью интегрированы с СОМ+.

Эффективный поиск (см. выше).

Возможности для разработчиков сценариев. Службы IIS предоставляют разработчику сценариев (программисту) среду для разработки приложений, которая эффективно управляет потоками и процессами и обеспечивает высокую масштабируемость. Можно использовать следующие функциональные возможности IIS для того, чтобы обеспечить дополнительную поддержку сценариев, компонентов или распределенных приложений:

Возможность изолирования процессов. Можно настроить IIS таким образом, чтобы изолировать друг от друга приложения, выполняющиеся в контексте IIS, т. е. заставить их работать & отдельных областях памяти. Это означает, что если приложения функционируют неправильно, они не будут воздействовать на работу других приложений или сервера в целом.
Интеграция с технологиями доступа к данным. При создании и выполнении программ для доступа к базам данных можно использовать набор компонентов доступа к данным MDAC (см. выше).
Разработка надежных приложений с применением СОМ+. Можно выполнять сценарии или приложения внутри одной транзакции. Объекты активизируются по требованию и деактивизируются после использования. Это позволяет экономить ресурсы сервера и увеличить число пользователей, одновременно работающих с приложением.

Новые возможности ASP

Active Server Pages — основной механизм создания веб-ориентированных приложений для HS. ASP были расширены возможностями, которые делают более легким применение ASP для разработчиков сценариев и веб-приложений.

Новые возможности по управлению Потоком данных. Объект ASP Server имеет два новых метода, которые можно использовать для управления потоком данных из программы (Server.Transfer и Server.Execute). Эти методы действуют более эффективно, чем переназначение запросов, которое требует высокой производительности:сети при передаче данных клиенту и обратно; эти методы обеспечивают передачу запросов непосредственно файлу *.asp, при этом поток управления не покидает сервер.

Обработка ошибок. ASP-страницы содержат новую возможность обработки ошибок, которая осуществляет перехват ошибок при помощи ловушек (traps) и дает пользовательское сообщение об ошибке. При помощи нового метода, Server.GetLastError, можно отображать полезную информацию, например, описание ошибки или номер строки в файле *.asp, где произошла ошибка.

ASP без сценариев (scriptless ASP). Поскольку статическое содержание обычно обрабатывается быстрее, чем содержание, сгенерированное сервером динамически, было бы лучше заранее присваивать расширение asp только файлам, которые реально содержат функциональные возможности ASP. Всякий раз, когда требовалось добавить функциональные возможности ASP статическим файлам HTML, нужно было вручную присвоить файлу расширение asp и обновить связанные с ним гаперссылки. В новой версии файлы *.asp, которые не используют функциональных серверных возможностей, будут обработаны быстрее, чем ранее. Так, при создании веб-приложения, в котором файлы могут, в конечном счёте, требовать использования функциональных возможностей ASP, теперь можно назначать этим файлам расширение asp независимо от того, содержат ли они статическую информацию или серверные расширения.

Улучшенная производительность компонентов. В состав IIS включены расширенные версии наиболее часто используемых объектов ASP, которые обеспечивают повышенную производительность.

Интеграция с XML. Язык extensible Markup Language (XML, Расширяемый язык разметки) позволяет легко описывать сложные структуры данных и

совместно использовать информацию в клиентских и серверных приложениях. Новый синтаксический анализатор XML, включенный в Internet Explorer версии 4.0 и выше, сделал возможным создание ASP-приложений, позволяющих веб-серверу обмениваться форматированными данными XML с Internet Explorer и другими браузерами или с любыми другими серверами, имеющими поддержку XML.

Сервер скриптлетов. ASP поддерживает новую мощную технологию создания сценариев — сервер скриптлетов (от «scriptlet» — маленький сценарий). Теперь можно оформлять логические бизнес-правила сценариев в виде компонентов СОМ для многократного применения их в веб-приложениях, а также в других программах, поддерживающих СОМ.

Новый способ определять возможности браузера. ASP имеет новую возможность для определения точных возможностей браузера. Когда браузер посылает файл cookie с описанием своих возможностей (файл cookie может быть передан серверу при помощи простого сценария на стороне клиента), можно создать образец компонента возможностей браузера, который получает реквизиты браузера в том виде, в каком браузер вернул их в cookie. Так, прежде чем пользователь обратится к веб-приложению, мбжно выбрать этот путь, чтобы обнаружить возможности браузера и скорректировать поведение приложения.

Автоподстройка ASP. Механизм ASP теперь чувствителен при выполнении запросов к блокированию внешних ресурсов и автоматически создает большее количество потоков, чтобы выполнить дополнительные запросы и продолжать нормальную обработку. Когда процессор становится слишком загруженным, механизмы поддержки ASP сокращают число потоков, чтобы уменьшить время на переключение приложений, что происходит, когда одновременно выполняется слишком много неблокирующихся запросов.

Новая архитектура информационных систем

Многоуровневые приложения. Современные приложения типа «клиент-сервер» настолько не похожи на своих предшественников, что им было дано новое имя — многоуровневые приложения. Такая архитектура называется также n-уровневой или многоуровневой. В этой модели обработка данных распределена между клиентом и сервером, и бизнес-логика располагается на среднем уровне. С функциональной точки зрения большинство систем реализует три следующих основных задачи:

Представление данных
Бизнес-логика
Службы хранения данных

Уровень представления данных включает всю работу с пользователем. На этом уровне пользователи могут не только взаимодействовать с приложением, вводить данные и просматривать результаты запросов, но и управлять манипулированием данными и их форматированием после того, как они попадают на клиентскую сторону. В веб-технологии задача уровня представления данных выполняет браузер.

Службы хранения данных обеспечиваются различными структурированными хранилищами информации (серверами БД, например, Microsoft SQL Server, Oracle) или неструктурированными хранилищами (Microsoft Exchange, Microsoft Message Queue Services), которые управляют и обеспечивают доступ к данным из приложения. Отдельный запрос может потребовать использования одного или более хранилищ данных.

Между этими двумя уровнями находится область для разработки распределенных приложений. Уровень бизнес-логики задает правила управления обработкой приложений, соединяет пользователя на одном конце с данными на другом.

Трехуровневая архитектура изолирует каждый сегмент функциональных возможностей. Представление не зависит от правил обработки и бизнес-логики, которая, в свою очередь, является отдельной от данных. Эта модель требует намного больше затрат на анализ и проектирование, но значительно уменьшает расходы на техническую поддержку и сопровождение и, в конечном счете, увеличивает функциональную гибкость. На рис. 22.3 представлена схема, которая описывает технологии Microsoft, обслуживающие различные уровни в системах с новой архитектурой.

Рис 22.3. Архитектура трехуровневых систем на базе служб Microsoft

Распределенная архитектура Интернет-приложений. Компания Microsoft разработала технологию Windows Distributed interNet Application Architecture (Windows DNA, Распределенная архитектура Интернет-приложений Windows), полностью интегрирующую многоуровневую модель разработки с веб-технологией. Windows DNA определяет каркас для создания решений, которые удовлетворяют требованиям корпоративных вычислений, Интернета, интрасетей и глобальной электронной торговли, уменьшая при этом издержки на общую разработку и развертывание системы.

В архитектуре Windows DNA стандартные службы на базе Windows выполняют определенные задачи на каждом уровне в многоуровневом решении, обеспечивая интерфейс пользователя и навигацию, бизнес-логику и хранение данных. Различные службы интегрированы при помощи Common Object Model (COM, Общая объектная модель). Службы, используемые в Windows DNA, включают; Dynamic HTML (Динамический HTML), Active Server Pages (Активные серверные страницы, ASP), компоненты COM, Microsoft Transaction Server,, службу Active Directory, службы безопасности Windows 2000, Microsoft Message Queue Services (MSMQ, Службы очереди сообщений) и компоненты доступа к данным Microsoft.

Архитектура Windows DNA создана с применением открытых протоколов и общедоступных интерфейсов, что облегчает организациям задачу интеграции новых систем с продуктами третьих фирм. Обеспечивая промышленные стандарты Интернета, Windows DNA упрощает работы по внедрению новых технологий для разработчиков. На рис. 22.4 представлена схема, которая иллюстрирует технологии — составные части Windows DNA.


Рис 22.4. Технологии Windows DNA

Установка и удаление служб IIS

Службы Internet Information Services устанавливаются на компьютере с Windows 2000 Server по умолчанию. Можно установить IIS, удалить или установить дополнительные компоненты, используя значок Установка и удаление программ (Add/Remove Programs) из панели управления.

Чтобы установить IIS, добавить или удалить компоненты:

1. Выберите команду Пуск (Start) | Настройка (Settings) | Панель управления (Control panel) и дважды щелкните на значке Установка и удаление программ (Add/Remove Programs).
2. В левом столбце диалогового окна Установка и удаление программ перейдите на вкладку Установка и удаление компонентов Windows (Add/Remove Windows Components).
3. Когда запустится Мастер компонентов Windows (Windows Components Wizard), нажмите кнопку Далее (Next).
4. В списке Компоненты (Windows Components) выберите Internet Information Services (IIS) (рис. 22.5).
5. Нажмите кнопку Далее и следуйте командам мастера.

Основные компоненты IIS

Основные компоненты IIS, которые можно удалить или установить из панели управления (рис. 22.6):

Общие файлы (Common Files)
Документация (Documentation)
FTP-сервер (File Transfer Protocol) (File Transfer Protocol (FTP) Server)
Серверные расширения для FrpntPage 2000 (FrontPage 2000 Server Extensions)
Объект IIS для консоли ММС (Internet Information Services Snap-In)
Диспетчер служб Интернета (HTML) (Internet Services Manager (HTML))
Служба NNTP (NNTP Service) П Служба SMTP (SMTP Service)
Поддержка удаленного развертывания Visual InterDev RAD (Visual InterDev RAD Remote Deployment Support)
Веб-сервер (World Wide Web Server)

Рис 22.5. Установка и удаление служб IIS
Рис 22.6. Компоненты служб IIS

Примечание

Если ОС Windows 2000 устанавливалась поверх предыдущей версии Windows, IIS устанавливаются по умолчанию, только если веб-сервер (IIS) был установлен в предыдущей версии Windows.

Удаление служб IIS производится при помощи той же процедуры, что и установка. Для удаления IIS сбросьте флажок рядом с названием компонента Windows в списке компонентов.

Каталоги, содержащие пользовательские данные, остаются в системе после того, как IIS полностью удаляется:

\Inetpub
%SystemRoot%\Help\iisHelp
%SystemRoot%\system32\inetsrv

Администрирование служб IIS

Не всегда удобно администрировать службы IIS непосредственно на компьютере, где они установлены. Для решения проблем локального и удаленного администрирования есть два средства: если соединение с сервером устанавливается через Интернет или через прокси-сервер, можно использовать Диспетчер служб Интернета (HTML) (Internet Services Manager (HTML)), который доступен через веб-браузер и позволяет настраивать различные свойства узлов; если соединение с сервером устанавливается через интраееть, можно использовать или диспетчер служб Интернета (HTML), или оснастку Internet Information Services. Хотя диспетчер служб Интернета (HTML) и предоставляет большинство возможностей оснастки, однако изменение свойств, которое требует взаимодействия с утилитами Windows, не может быть выполнено с его помощью.

Внимание В предыдущей версии IIS оснастка для управления службами называлась Internet Services Manager . В Windows 2000 оснастка называется Internet Information Services, а ярлык в меню Пуск — Диспетчер служб Интернета (Internet Services Manager).

Также для удаленного администрирования доступна онлайновая версия документации. Чтобы обратиться к документации, запустите браузер и введите в поле адреса URL http://имя_cepвepa/iishelp , где имя_сервера — реальное доменное имя компьютера, на котором функционируют службы IIS.

Для удаленного управления IIS можно также использовать возможности служб терминалов (Terminal Services). Удаленное управление может производиться с компьютера под управлением любой ОС, для которой существует клиент служб терминалов Microsoft, при этом на удаленном компьютере не нужно устанавливать никакие средства администрирования IIS.

Оснастка Internet Information Services. Оснастка Internet Information Services (рис. 22.1) — средство администрирования IIS, доступна из меню Пуск | Программы | Администрирование | Диспетчер служб Интернета (Start | Programs | Administrative Tools | Internet Services Manager). Также она включена в состав оснастки Управление компьютером (Computer Management).

Для запуска оснастки Internet Information Services:

1. Запустите оснастку Управление компьютером. Один из способов — нажать кнопку Пуск (Start), а затем в меню выбрать команду Пуск | Программы | Администрирование | Управление компьютером (Programs | Administrative Tools | Computer Management).
2. В дереве в группе Службы и приложения (Services and Applications) найдите и разверните узел Internet Information Services.

Примечание

Для удобства средство администрирования US (которое представляет собой оснастку Internet Information Services) будем также называть по имени ярлыка из меню Пуск (Start) — Диспетчер служб Интернета

Диспетчер служб Интернета (HTML). Для управления свойствами IIS в диспетчере служб Интернета (HTML) 4 (рис. 22.2) используется узел, который в списке узлов отображается как Администрирование веб-узла (Administration Web Site). При установке IIS автоматически случайно выбирается номер порта в диапазоне от 2000 до 9999, который назначается этому веб-узлу. Узел отвечает на запросы веб-браузеров, независимо от того, к какому доменному имени (из связанных с данным компьютером) происходит обращение, при совпадении номера порта, который добавляется в конце к имени узла. Если используется базовая (basic) аутентификация, то от администратора при подключении к административному узлу будут запрошены имя пользователя и пароль. Только члены группы Windows Администраторы (Administrators) могут использовать этот административный узел. Также управлять узлом дистанционно могут Операторы узла (Web Site Operators). Хотя HTML-версия диспетчера служб Интернета реализует большинство функциональных возможностей оснастки IIS, версия с использованием HTML предназначена для удаленного управления по медленным коммутируемым линиям. В ней не поддерживается, например, щелчок правой кнопкой мыши. Многие из знакомых кнопок на панели или заголовки вкладок отображаются в виде гиперссылок в левой панели окна браузера.

Администрирование служб веб и FTP

Веб-узлы и FTP-узлы. В интрасетях и Интернете можно создавать несколько веб- и FTP-узлов (сайтов) на одном компьютере, который работает под управлением Windows 2000, одним из следующих способов:

При помощи разных номеров портов для одного адреса
Используя несколько IP-адресов, назначенных одному адаптеру
Используя несколько доменных имен для одного IP-адреса и одного сетевого адаптера

Предположим, что в корпоративной интрасети системный администратор установил на сервере компании систему Windows 2000 Server со службами IIS и создал единственный узел по умолчанию, который имеет адрес http://Information. Системный администратор может создать два дополнительных информационных узла, по одному для каждого отдела, например, для отдела продаж (Sales) и для отдела закупок (Purchase).

Хотя оба узла расположены на одном компьютере (Information), они являются автономно функционирующими узлами (сайтами). Эти узлы имеют раздельные настройки защиты, как если бы они находились на разных компьютерах, поскольку каждый узел имеет собственные параметры доступа и настройки разрешений по администрированию. Кроме того, административные задачи могут быть распределены между членами каждого отдела.

Свойства и наследование свойств. Свойства— параметры, которые могут быть настроены для конкретного узла. Например, можно использовать оснастку Internet Information Services, чтобы изменить порт TCP по умолчанию (80) для сервера на другой номер порта. Свойства узла видны в окнах свойств и хранятся в базе данных, которая называется метабазой (metabase).

В процессе инсталляции IIS различным свойствам и параметрам присваиваются значения по умолчанию. Можно использовать настройки по умолчанию для IIS или настраивать эти параметры, чтобы адаптировать функциональность сервера к потребностям сети. Можно также обеспечить дополнительные функций, улучшить производительность, а также изменить настройки защиты, внося изменения в настройки по умолчанию.

Свойства могут быть установлены на уровне узлов, на уровне каталогов, или на уровне файлов. Параметры настройки на более высоких уровнях (например, на уровне узлов) автоматически используются (наследуются) более низкими уровнями (например, уровнем каталогов), но все могут редактироваться раздельно на более низком уровне. Если свойство было изменено для отдельного узла, каталога или файла, а затем будет произведен возврат к значению по умолчанию, то автоматическая настройка не отменит индивидуальную настройку. При выполнении такого рода действий администратор получит предупреждающее сообщение, и ему нужно будет ответить на вопрос, хочет ли он изменить настройку для отдельного узла, каталога или файла, чтобы она соответствовала новым значениям по умолчанию.

Некоторые свойства имеют значение, которое представляет собой список. , Например, значение свойства «Документ, используемый по умолчанию» (Default Document) — список документов, которые будут загружены, когда пользователь не задает файл в URL. Пользовательские сообщения об ошибках, управление доступом по TCP/IP, отображение MIME —- примеры свойств, которые хранятся в виде списка. Хотя эти списки состоят из нескольких записей, IIS рассматривает список целиком как единое целое. Если список редактируется для каталога, а затем производится глобальная замена на уровне узлов, список на уровне каталога полностью заменяется новым списком с уровня узла; списки не объединяются. Также свойства-списки отображаются в виде списка с составом только на верхнем уровне, управляющем, или на уровне узла или каталога, для которого значение по умолчанию было изменено. Значения-списки не отображаются, если они являются унаследованными значениями по умолчанию.

Фильтры отображаются в виде списка, но обрабатываются не как список. Если фильтры добавляются на уровне узлов, то новые фильтры объединяются со списком фильтров от управляющего уровня. Если два фильтра имеют одинаковые установки приоритетов, фильтр с управляющего уровня загружается перед фильтром с уровня узла.

Если создается несколько веб- или FTP-узлов, можно редактировать значения по умолчанию (рис. 22.7) таким образом, чтобы каждый узел, который создается, наследовал пользовательские значения узлов по умолчанию (Веб-узел по умолчанию и FTP-узел по умолчанию (Default Web Site и Default FTP Site)).

Рис 22.7. Свойства веб-узла по умолчанию

Операторы узла. Это специальная группа пользователей, которым предоставлены ограниченные административные привилегии для данного узла. Операторы могут управлять свойствами, имеющими отношение только к соответствующему узлу. Они не имеют доступа к свойствам, которые относятся к управлению IIS в целом, к управлению компьютером-сервером Windows или сетью.

Например, поставщик Интернет-услуг, поддерживающий узлы множества различных компаний, может делегировать полномочия на поддержку соответствующих узлов представителю каждой компании в качестве оператора узла. Этот метод распределенного администрирования сервера имеет следующие преимущества:

Каждый оператор может действовать в качестве администратора узла и может изменять узел (его наполнение и настройки) по мере необходимости. Например, оператор может устанавливать разрешения доступа к узлу, разрешать ведение журнала, изменять документ по умолчанию или заголовок, устанавливать временные параметры и т. п.
Оператор узла не может изменять параметры аутентификации узла, конфигурировать имя анонимного пользователя или пароль, настраивать ширину полосы пропускания, создавать виртуальные каталоги или изменять их пути и т. п.
Поскольку операторы имеют большие ограничения по привилегиям, чем администраторы узлов, они не могут дистанционно просматривать файловую систему и поэтому не могут устанавливать свойства каталогов и файлов, если только не используется UNC-путь.

FTP-докачка. FTP-докачка (с использованием команды REST) решает проблему, возникающую при потере соединения при загрузке файлов. Клиентам, которые поддерживают докачку, нужно выполнить только восстановление подключения и, при помощи команды REST, продолжить передачу данных на том месте, где она была прервана.

Примечание В IIS докачка по протоколу FTP невозможна в следующих случаях: при использовании запроса на получение файла по маске (МОЕТ), при передаче файлов на сервер (PUT) или при получении файлов размером более 4 Гбайт.

Сопоставление MIME. MIME (Multipurpose Internet Mail Extensions, Многоцелевые почтовые расширения Интернета) — стандарт сети Интернет, который предоставляет возможность программам просмотра (браузерам) определять формат файла и корректно его отображать. Зарегистрированные типы файлов, которые установлены по умолчанию в Windows 2000, перечислены в окне Типы файла (File type), доступном на вкладке Internet Information Services в диалоговом окне свойств служб IIS данного компьютера (доступны для компьютера из контекстного меню корневого узла оснастки Internet Information Services).

Сопоставления (map) MIME могут быть настроены на уровне компьютера, на уровне узла, на уровне виртуального каталога, на уровне каталога или на уровне файлов. Чтобы настроить отображения MIME на уровне компьютера, необходимо перейти в диалоговое окно Свойства (Properties) служб IIS данного компьютера (в контекстном меню в оснастке IIS выбрать пункт меню Свойства). Чтобы настроить отображения MIME на других уровнях, нужно использовать вкладку Заголовки HTTP (HTTP Headers) диалогового окна свойств объекта соответствующего уровня.

Отображения MIME, заданные на уровне компьютера, не отменяют автоматически установки на более низких уровнях.

Управление информационным наполнением

Необходимость в корректном управлении содержимым (наполнением, content) очевидна. Предположим, что создан сложный информационный сервер преуспевающей компании. На каком-то этапе был спроектирован дизайн сервера — заголовки, подвалы и элементы оформления. Однако в самом конце выяснилось, что была допущена ошибка в логотипе компании, который расположен на всех многочисленных страницах узла. Возможны также неисправности в аппаратной части компьютера. При этом может понадобиться перенаправить всех пользователей узла на другой, резервный сервер, пока производится восстановление аппаратуры.

Такие проблемы ярко демонстрируют необходимость корректного управления веб-узлом. И хотя эффективное управление узлом, в конечном счете, зависит от навыка администратора, существует множество основных инструментов и процедур, применяемых для решения наиболее важных задач управления.

Начальные действия. Сначала нужно создать веб-узел и указать, в каких каталогах хранятся публикуемые документы. Веб-сервер не может опубликовать документы, которые находятся вне пределов указанных каталогов. Первым шагом в развертывании веб-узла является задание организационной структуры файлов. После этого, используя оснастку Internet Information Services, нужно задать, какие каталоги являются частью узла.

Если необходимо опубликовать информацию немедленно, не тратя время на создание структуры каталогов узла, и все файлы расположены на одном и том же жестком диске, можно просто скопировать публикуемые файлы в основной каталог по умолчанию, \InetPub\Wwwroot. (Для FTP-узла, нужно скопировать файлы в каталог \InetPub\Ftproot.) Пользователи сети смогут обращаться к этим файлам, вводя URL-адрес http://server/имя_файла

Задание домашних каталогов. Каждый веб-узел или FTP-узел должен иметь корневой (домашний) каталог. Домашний каталог — отправная точка для организации информационной структуры публикуемых страниц. Он содержит домашнюю страницу или индексный файл, который является стартовой страницей узла и содержит ссылки на другие страницы на узле. Домашний каталог привязывается к имени домена узла или к имени сервера.

Например, если имя домена узла — www.myfirm.com и корневой каталог — \Webserver\MyFirm, то браузер, обращаясь по URL http://www.myfirm.com, получит файлы из корневого каталога. В интрасети, если имя сервера — Infoserver, то браузер, обращаясь по URL http://Infoserver, получит доступ к файлам в корневом каталоге.

Корневой каталог по умолчанию создается при установке Internet Information Services, а также при создании нового веб-узла. Корневой каталог можно изменять (рис. 22.8).

Рис 22.8. Задание домашнего каталога

Виртуальные каталоги. Чтобы публиковать информацию из любого каталога, который не содержится внутри корневого каталога, нужно создать виртуальный каталог. Виртуальный каталог— это каталог, который не содержится в корневом каталоге, но для клиента он выглядит так, как если бы он был частью корневого каталога.

Виртуальный каталог имеет псевдоним, то есть имя, которое веб-браузеры используют для обращения к этому каталогу. Поскольку псевдоним обычно короче полного пути каталога, пользователям его удобнее вводить. Псевдоним безопаснее; пользователи >не знают, где файлы физически расположены на сервере, и не могут использовать эту информацию для изменения этих файлов. Псевдонимы упрощают перемещение каталогов в узле. Не изменяя URL-адрес каталога, можно изменить отображение между псевдонимом и физическим местоположением каталога.

Предположим, что для публикации информации в сети установлен узел infoserver. В табл. 22.1 показано соответствие между физическим местоположением файлов и URL, по которому файлы доступны.

Таблица 22.1. Примеры соответствия между физическим местоположением, псевдонимом и URL-адресом

Физическое местоположение Псевдоним Путь URL
c:\wwwroot Домашний каталог (нет псевдонима) http:/flnfoserver
\\Server2\info\Data Data http://Sales/Data
c:\wwwroot\Schedule Нет httyj://infoserver/Schedule
c:\wwwroot\Products Нет http://infoserver/Schedule
d :\samples\documents Text http://infoserver/Schedule

Как виртуальные, так и физические каталоги (каталоги без псевдонима) видны в оснастке Internet Information Services. Виртуальный каталог обозначается в виде значка папки с глобусом в углу.

Для простого веб-узла не требуется создание виртуальных каталогов. Можно просто разместить все файлы в основном каталоге узла. Если нужно построить сложный узел или задать различные URL для различных частей узла, можно добавлять виртуальные каталоги по необходимости.

Переадресация запросов. Когда браузер запрашивает страницу с узла, веб-сервер ищет страницу по заданному URJL и возвращает ее браузеру. Когда страница перемещается внутри узла, не всегда можно исправить все связи, которые ссылаются на старый URL страницы. Чтобы удостовериться в том, что браузеры смогут найти страницу по новому URL, можно заставить веб-сервер предоставлять браузеру новый URL. Браузер использует новый URL, чтобы запросить эту страницу снова. Этот процесс называется переадресацией запроса браузера или переадресацией на другой URL. Переадресация запроса о получении страницы подобна переадресации в почтовой службе. Переадресация гарантирует, что письма и пакеты, отправленные по предыдущему адресу вашего проживания, будут доставлены по новому адресу.

Переадресация URL полезна, когда узел подвергается переделкам и нужно сделать часть узла временно недоступной, или когда было изменено имя виртуального каталога и нужно заставить браузеры обращаться не к файлам в исходном виртуальном каталоге, а к тем же самым файлйм в новом виртуальном каталоге.

Другие средства. Часто может потребоваться динамически изменять содержание узла после того, как содержание было затребовано, но до передачи его браузеру. IIS включает две возможности, которые обеспечивают эту функциональность — серверные включения (Server-Side Includes, SSI) и Microsoft Active Server Pages (ASP) — для создания сценариев-посредников.

Используя SSI, можно выполнять ряд действий — от динамического отображения текущего времени на странице до выполнения заданных системных команд каждый раз, когда запрашивается данный ресурс (страница). SSI-команды, называемые директивами, включаются в страницы во времени разработки. Когда страница запрашивается, веб-сервер анализирует синтаксис всех директив на странице, а затем выполняет их. Наиболее часто используется директива включения, что позволяет включать содержимое файла внутрь страницы. Например, если требуется, чтобы в заголовок страницы вставлялась реклама, можно при помощи SSI включить исходный текст рекламы. Чтобы модифицировать рекламу, нужно изменить только файл, содержащий исходный текст рекламы. Для применения SSI не нужно знать язык создания сценариев — синтаксис директив очень прост.

ASP-страницы — серверная среда создания сценариев, позволяющая динамически изменять содержимое узла. Хотя технология ASP предназначена прежде всего для разработки веб-приложений, она предоставляет много возможностей для создания более простых в управлении узлов. Например, с помощью ASP можно отслеживать посещение узла пользователями (их атрибуты— IP-адрес, тип браузера, назначенные cookies и т. п.) или настраивать содержимое узла под возможности браузера. Однако, в отличие от SSI, ASP требует применения языка создания сценария, например VBScript или JScript.

Выбор инструмента для создания страниц. Феноменальный рост сети Интернет и развитие технологий интрасетей создали огромный спрос на специализированные средства создания узлов. Если пользователь плохо знаком с основами публикации в Интернете, выбрать надлежащий инструмент для создания узла может быть достаточно сложно. Мощного сервера, предназначенного для размещения готовых страниц, недостаточно для успешного пуска и эксплуатации информационного узла в Интернете. Вот инструменты создания и публикации узлов:

Microsoft FrontPage 2000. Удобный, простой и мощный инструмент создания страниц и публикации их в сети. Обладает возможностями WYSIWYG (What You See Is What You Get, принцип «что видишь — то и получишь», т. е. визуальное создание с непосредственным отображением результата), тесно интегрирован с Microsoft Office 2000 и со службами IIS.
Преобразование в HTML. Привлекательная альтернатива созданию страниц — преобразование существующих документов в документы HTML. Применяя к файлам текстового процессора и электронных таблиц конвертер, можно сразу помещать такого рода страницы в сети, на веб-сервере. Многие программы обработки текстов, например Microsoft Word 2000, имеют встроенные возможности для преобразования документов в формат HTML. Однако большинство конвертеров только добавляет тэги форматирования HTML к тексту, плохо сохраняя первоначальный вид документов. Конвертеры — удобные средства, они особенно полезны, если планируется публиковать большую часть существующей документации, которая не нуждается в частом изменении.
Текстовый редактор. Страницы можно создавать почти в любом стандартном текстовом редакторе, например, в Блокноте (Notepad), вводя тэги HTML и содержимое страниц, сохраняя в файле, а затем открывая их в браузере для предварительного просмотра. Некоторые опытные пользователи предпочитают этот метод, потому что он обеспечивает более тонкий контроль форматирования страниц и позволяет применять последние технологические новшества Интернета.

Служба Microsoft NNTP проста в управлении, поскольку содержит удобные инструменты и поддерживает тесную интеграцию с Microsoft Windows 2000 Server. Вот основные возможности службы Microsoft NNTP:

Поддержка стандартов

Служба Microsoft NNTP поддерживает Network News Transport Protocol (NNTP, Протокол доставки сетевых новостей), который предназначен для связи клиента с сервером, а также для связи двух серверов. Служба Microsoft NNTP поддерживает популярные расширения NNTP и полностью совместима с другими клиентами и серверами NNTP.

Кроме того, служба Microsoft NNTP поддерживает многочисленные форматы, включая:

  • Multipurpose Internet Mail Extension (MIME)
  • Язык разметки гипертекста HTML
  • Формат изображений GIF
  • Формат изображений JPEG

Поддержка этих стандартов позволяет включать изображения и гипертекстовые ссылки в статьи новостей.

Простота администрирования

Служба Microsoft NNTP предлагает на выбор два графических инструмента для выполнения всех задач администрирования:

  • Оснастка Internet Information Services. С помощью этой оснастки управление службой Microsoft NNTP осуществляется в пределах одной ЛВС. Этот инструмент может управлять всеми компонентами IIS, используя единый интерфейс (рис. 22.9).
  • Диспетчер служб Интернета (HTML). При помощи веб-браузера, например Microsoft Internet Explorer, можно управлять службой Microsoft NNTP с любого компьютера локальной сети или из Интернета. Единственное требование для применения этого инструмента — наличие любого веб-браузера на компьютере администратора.

Рис 22.9. Оснастка Internet Information Services — управление службой Microsoft NNTP
Интеграция с Microsoft Windows 2000

Служба Microsoft NNTP полностью использует преимущества стандартных инструментов администрирования Windows 2000 для текущего контроля производительности и отслеживания событий. При инсталляции службы Microsoft NNTP устанавливается набор счетчиков для оснастки Системный монитор. Все состояния службы Microsoft NNTP и сообщения об ошибках записываются в журналы событий и могут просматриваться при помощи оснастки Просмотр событий. Служба Microsoft NNTP также включает поддержку SNMP.

Служба Microsoft NNTP управляет доступом к группам новостей, используя списки ACL Windows 2000. Устанавливая разрешения на каталог, который содержит группу новостей, можно управлять доступом к этой группе новостей. Можно также разрешить анонимный доступ, при этом доступ к группе новостей будет предоставлен всем.

Интеграция со службой индексирования

Служба Microsoft NNTP поддерживает полнотекстовое индексирование содержания и индексирование по свойствам групп новостей.

Улучшенная безопасность

Служба Microsoft NNTP поддерживает несколько вариантов безопасности, которые аутентифицируют пользователей групп новостей и защищают частную информацию:

  • Анонимный доступ (anonymous access). Разрешает любому пользователю доступ к группе новостей, не требует указания имени пользователя или пароля.
  • Стандартное расширение безопасности NNTP (Standard Secure NNTP extension). Требует, чтобы пользователь предоставил имя пользователя и пароль, которые посылаются по сети открытым текстом.
  • Протокол вызова/ответа Windows (Windows Challenge/Answer Protocol). Требует, чтобы пользователь предоставил имя пользователя и пароль, которые передаются в шифрованном виде для безопасной передачи по сети. Этот протокол требует использования клиентского программного обеспечения Microsoft Internet Mail and News (или Outlook Express).
  • Протокол SSL (Secure Sockets Layer). Чтобы защитить информацию, передаваемую через общую сеть, служба Microsoft NNTP поддерживает шифрование SSL, которое включает проверку подлинности клиентов и серверов.

Для управления службой Microsoft NNTP можно использовать одно из двух средств администрирования. Выбор инструмента зависит от того, какие задачи нужно выполнять при администрировании, и от того, по какому каналу происходит соединение со службой. Можно управлять службой Microsoft NNTP как с компьютера, на котором служба работает, так и с удаленного компьютера:

Оснастка Internet Information Services может выполнять все задачи по администрированию, требует подключения через ЛВС. При ее использовании для управления службой NNTP нужно раскрыть узел Виртуальный NNTP-сервер по умолчанию.

Примечание

Оснастку Internet Information Services можно использовать для управления виртуальным сервером NNTP и с удаленного компьютера, если он находится в той же ЛВС, что и Microsoft NNTP Service. Однако этот компьютер должен работать под управлением Microsoft Windows 2000, и на нем! должны быть установлены средства администрирования Windows 2000.
Виртуальный сервер, который создается по умолчанию на сервере после инсталляции службы, — Виртуальный NNTP-сврвер по умолчанию (Default NNTP Virtual Server). Служба Microsoft NNTP может состоять из одного или большего количества виртуальных серверов NNTP.

Чтобы просмотреть или изменить свойства виртуального сервера NNTP:

1. Выберите в дереве нужный виртуальный сервер NNTP.
2. В меню Действие (Action) выберите команду Свойства (Properties).
3. Перейдите на нужную вкладку в диалоговом окне.
4. Измените любые опции по необходимости.
Диспетчер NNTP Service Manager (HTML) позволяет решать большинство задач, выполняемых в оснастке ММС. Преимущество NNTP Service Manager (HTML) в том, что через веб-браузер можно администрировать службу при помощи любого соединения через любую сеть, включая Интернет. Браузер может находиться на компьютере, на котором функционирует служба, или на любом другом компьютере, который может установить соединение по протоколу TCP/IP со службой Microsoft NNTP. В качестве браузера используйте Microsoft Internet Explorer версии 4.0 и старше или Netscape Navigator версии 4.0 и старше.

Для обращения к NNTP Service Manager (HTML) с компьютера, на котором функционирует служба Microsoft NNTP:

  • В строке адреса введите http://iocalhost/news/admin и перейдите к этому адресу

Для обращения к NNTP Service Manager (HTML) с удаленного компьютера:

  • В строке адреса введите http://имя_сервера/news/admin где имя_сервера — компьютер, на котором функционирует служба Microsoft NNTP.

Примечание

Предварительно следует удостовериться, что удаленный компьютер имеет необходимые разрешения для доступа к NNTP Service Manager (HTML).

При инсталляции службы Microsoft NNTP на компьютер устанавливаются оба средства администрирования. Для доступа к оснастке управления службой с удаленного компьютера нужен компьютер под управлением Microsoft Windows 2000; на удаленном компьютере должны быть установлены средства администрирования Windows 2000 (Windows 2000 Administrative Tools).

Функционирование службы NNTP

Служба Microsoft NNTP поддерживает протокол NNTP (Network News Transfer Protocol, Протокол передачи новостей Интернета), который является клиент-серверным протоколом. Служба Microsoft NNTP выступает в роли сервера, a Microsoft Outlook Express — пример типичного клиента.

Клиенты подключаются к службе Microsoft NNTP по протоколу TCP/IP. Обычно по умолчанию при нормальном подключении используется TCP-порт 119, для шифрованных SSL-подключений — TCP-порт 563.

Microsoft NNTP работает как служба на сервере Windows 2000 и стартует автоматически; ее имя в оснастке Службы (Services) — Протокол Network News Transport Protocol (NNTP) (в англоязычной версии — Network News Transfer Protocol (NNTP)).

Публикация статей. Для передачи статьи телеконференции через службу Microsoft NNTP следует использовать программу-клиент новостей, например Microsoft Outlook Express. Клиент подключается к NNTP и запрашивает публикацию переданной статьи в одной или более телеконференций. Служба NNTP устанавливает соединение, принимает запрос и проверяет права пользователя на публикацию статьи в указанных телеконференциях (рис. 22.10). Служба NNTP затем публикует статью в телеконференциях и модифицирует индекс телеконференции.

Рис 22.10. Публикация статей

Просмотр статей. Для просмотра статей в телеконференциях, опубликованных при помощи службы Microsoft NNTP, необходимо использовать программу-клиент чтения новостей, например Microsoft Outlook Express.

Первый шаг при просмотре статей в телеконференции — получение списка доступных телеконференций (рис. 22.11). Клиент подключается к службе Microsoft NNTP и запрашивает список доступных телеконференций. Служба Microsoft NNTP принимает запрос, аутентифицирует пользователя, обращающегося к телеконференциям, проверяет его права, а затем посылает клиенту список всех доступных телеконференций.


Второй шаг — выбор телеконференции, которую пользователь хочет просмотреть. Клиент запрашивает список статей в выбранной телеконференции. Служба Microsoft NNTP аутентифицирует пользователя, обращающегося к указанной телеконференции, проверяет его полномочия и посылает клиенту список всех статей в этой телеконференции. Затем пользователь выбирает статью, клиент запрашивает выбранную статью у службы Microsoft NNTP, а служба возвращает содержимое статьи.

Рис 22.11. Просмотр статей

Структуры данных службы Microsoft NNTP. Статьи телеконференций в службе Microsoft NNTP хранятся в одной или в нескольких группах иерархических каталогов. Каждая телеконференция имеет собственный каталог, а каждая статья хранится как файл в этом каталоге.

Основной каталог по умолчанию — C:\Inetpub\Nntpfile\root, его можно переназначить на вкладке свойств основного каталога виртуального сервера NNTP. Можно создавать дополнительные иерархии каталогов на других дисках или на других компьютерах, создавая виртуальные каталоги.

Каталог телеконференции имеет то же имя, что и сама телеконференция. Служба Microsoft NNTP автоматически создает требуемые каталоги, когда создается новая телеконференция. Например, телеконференция, названная sample.test хранится в подкаталоге \sample\test относительно корневого каталога, то есть в каталоге C:\Inetpub\Nntpfile\root\sample\test. Все файлы статей телеконференций имеют расширение nws.

Служба Microsoft NNTP также создает файлы, в которых хранятся темы размещенных в телеконференции статей; эти файлы имеют расширение xix. Служба Microsoft NNTP создает один файл для каждых 128 статей в телеконференции.

Служба Microsoft NNTP также поддерживает множество внутренних файлов структуры данных с расширениями hsh, hdr, 1st и txt. Заданное по умолчанию расположение этих файлов — C:\Inetpub\Nntpfile. Нельзя изменять или удалять эти файлы. Средства восстановления службы Microsoft NNTP исправляет эти файлы, если они были случайно удалены или повреждены.

Примеры использования сервера NNTP

Виртуальный сервер новостей для внутренних корпоративных целей. Общение важно для любой группы людей, работающих вместе. Во многих организациях трудно заставить всех членов группы применять средства совместной работы на постоянной основе. Телеконференции могут решить проблемы общения и взаимодействия людей. Они дают возможность любому в группе читать или помещать свою информацию. Просто также найти нужную информацию по заданной тематике, поскольку статьи организованы в виде тематических потоков. В отличие от электронной почты, телеконференции обеспечивают механизм легкого архивирования информации для справочных целей.

Цель: Улучшить возможности взаимодействия между членами отдела, работающими над проектом и усовершенствовать организацию хранения и архивирования информации.

Состав программного обеспечения: Microsoft Windows 2000 Server, Microsoft Internet Information Services (US), Microsoft Internet Mail and News или Microsoft Outlook Express.

Среда: Сеть на базе Microsoft Windows.

Установка: Установить службу Microsoft NNTP — компонент US.

Прочие аспекты: Чтобы использовать телеконференции в качестве информационного архива, необходимо запретить удаление статей с истечением времени и производить периодическую архивацию информации.

Функционирование: Выполнение функций поддержки несколько телеконференций в пределах организации потребует не очень больших ресурсов со стороны сервера. Можно использовать любой компьютер, работающий под управлением Windows 2000 Server. Поскольку служба Microsoft NNTP использует стандартный протокол NNTP, сотрудники могут иметь доступ к

телеконференциям, используя любое клиентское программное обеспечение, поддерживающее NNTP, однако предпочтительно работать с Microsoft Internet Mail and News и Outlook Express — клиентами, которые обеспечивают дополнительные функции защиты, если есть потребность в таких функциях. Сервер и клиенты должны поддерживать TCP/IP.

URL для телеконференций будет иметь следующие форматы:

где сервер — имя или IP-адрес сервера NNTP, телеконференция — имя телеконференции, а статья — необязательный идентификатор конкретной статьи.

В зависимости от того, насколько конфиденциальными будут статьи, можно настраивать параметры защиты для телеконференции. Если информация доступна любому в организации и сеть защищена брандмауэром, можно разрешить анонимный вход. Для большей защиты можно использовать штатные средства безопасности Windows 2000, которые применяются к каждому пользователю телеконференции. Можно ограничить доступ к каталогам телеконференций для определенных учетных записей. Служба Microsoft NNTP управляет защитой, используя учетные записи Windows 2000 и соответствующие разрешения.

Результат: Работа членов отдела упростится. Сотрудники смогут читать и публиковать статьи, содержащие информацию по проекту, на сервере новостей. Для обсуждения деталей проекта не потребуются личные встречи, отнимающие время.

Общедоступный виртуальный сервер новостей. Может потребоваться несколько телеконференций с различной тематикой на общедоступном сервере новостей. Например, зарегистрированным пользователям некоторого продукта требуется одна конференция, а потенциальным покупателям, только собирающимся сделать свой выбор, — другая.

Цель: Уменьшить затраты на поддержку пользователей и улучшить клиентскую службу, предоставив клиентам быстрый свободный доступ к информации и технической поддержке.

Программные компоненты: Microsoft Windows 2000 Server, Microsoft Internet Information Services (US), Microsoft Internet Mail and News или Microsoft Outlook Express.

Установка: Разрешить анонимный доступ; использовать DNS или WINS для разрешения имени; обеспечить доступ через брандмауэр (при его наличии).

Прочие аспекты: Необходимо рассмотреть возможность организации моде-рируемых (редактируемых специальноч назначенным человеком, так называемым «модератором») конференций, чтобы предотвратить публикацию не-

корректных, технически неправильных статей. Это может ограничить возможность клиентов помочь друг другу, если персонал поддержки не доступен в настоящий момент.

Функционирование: Если службы IIS уже используются, то для обеспечения технической поддержки через публикацию технической информации на веб-сервере можно просто добавить поддержку телеконференций на том же компьютере. Если планируется активно использовать сервер телеконференций, можно расположить службу Microsoft NNTP на отдельном компьютере.

Можно создать отдельную телеконференцию для каждого продукта, для которого требуется техническая поддержка, или создать несколько телеконференций для каждого продукта, одну для каждой темы поддержки.

URL-адреса для телеконференций будут иметь стандартные форматы (см. выше).

Чтобы обеспечить наискорейшую отдачу от телеконференций, персонал поддержки клиентов должен достаточно часто читать статьи в телеконференциях и быстро отвечать на вопросы. Одним из удобных средств может оказаться публикация часто задаваемых вопросов (Frequently Asked Questions, FAQ) и ответов на них.

Результат: Клиенты получают более эффективную поддержку и, следовательно, в большей степени удовлетворены применяемыми продуктами, т. к. они имеют непосредственный доступ к самой свежей информации, касающейся этих продуктов. Производительность труда у персонала поддержки будет выше, т. к. теперь не нужно много раз отвечать на один и тот же вопрос.

Служба Microsoft SMTP имеет следующие особенности:

Поддержка стандартных протоколов Интернета. Служба Microsoft SMTP обеспечивает полную поддержку SMTP и совместима с почтовыми клиентами SMTP.
Масштабируемость. Служба Microsoft SMTP поддерживает сотни одновременных клиентских соединений при конфигурации с одним сервером. Можно также настроить использование множества доменов для одного сервера.
Простое администрирование и интеграция с Microsoft Windows 2000. Служба Microsoft SMTP управляется как через консоль ММС (рис. 22.12), так и с помощью веб-интерфейса.
Улучшенная безопасность. Служба Microsoft SMTP поддерживает протоколы безопасной передачи почты на транспортном уровне.
Прямая доставка и извлечение почты. Служба Microsoft SMTP поддерживает размещение всех входящих сообщений непосредственно в каталоге \Drop. Это позволяет использовать службу Microsoft SMTP для приема почты других приложений. В дополнение к передаче сообщений через порт TCP приложения могут использовать каталог \Pickup. После форматирования сообщения служба Microsoft SMTP осуществляет его доставку.

Можно управлять службой с помощью одного из двух административных средств. Выбор инструмента зависит от того, какие задачи должны выполняться, и от того, как производится соединение со службой. Можно управлять службой Microsoft SMTP с того компьютера, на котором служба функционирует, или с удаленного компьютера.

Служба Microsoft SMTP имеет стандартные средства управления:

Оснастка Internet Information Services, которая может выполнять все задачи по администрированию службы и требует подключения через ЛВС. В дереве консоли нужно развернуть узел Виртуальный NNTP-cepeep no умолчанию (рис. 22.12).

Виртуальный сервер, который создается при инсталляции службы, — Виртуальный NNTP-cepeep no умолчанию (Default SMTP Virtual Server).

Рис 22.12. Управление SMTP-сервером с помощью оснастки Internet Information Services (в составе оснастки Управление компьютером)

Диспетчер SMTP Service Manager (HTML), с помощью которого можно выполнять большинство задач управления, которые могли бы быть выполнены с помощью оснастки IIS. Преимущество SMTP Service Manager (HTML) в том, что можно подключаться и управлять службой SMTP с использованием любой сети, включая Интернет.

Для управления службой веб-браузер можно запускать на компьютере, где установлена служба, или с любого другого компьютера, работающего по протоколу TCP/IP и доступного по сети (включая подключение через Интернет). Необходим браузер Microsoft Internet Explorer 4.0 или выше, либо Netscape Navigator 4.0 или выше.

Для того чтобы запустить SMTP Service Manager (HTML) с компьютера, на котором выполняется служба Microsoft SMTP (имя службы — Протокол Simple Mail Transport Protocol (SMTP)):

  • В строке адреса браузера введите http://looalhost/mail/smtp/admin

Для того чтобы запустить SMTP Service Manager (HTML) с удаленного компьютера:

  • В строке адреса браузера введите http: //ceрвep/mail/smtp/admin

где сервер — имя компьютера, на котором функционирует служба Microsoft SMTP.

Примечание

Необходимо удостовериться, что удаленный компьютер имеет нужные разрешения для обращения к SMTP Service Manager (HTML).

Цвет значка виртуального сервера SMTP показывает состояние сервера: зеленый обозначает работающую службу, серый — приостановленную, красный — остановленную службу.

Оба административных средства установлены по умолчанию и функционируют на компьютере, на котором установлена служба SMTP фирмы Microsoft. Чтобы использовать управление через оснастку с удаленного компьютера, нужен компьютер под управлением Microsoft Windows 2000; на удаленном компьютере должны быть установлены средства администрирования Windows 2000 (Windows 2000 Administrative Tools).

Службы компонентов (Component Services) обеспечивают разработку и развертывание распределенных клиент-серверных приложений типа онлайновых бизнес-приложений и приложений электронной коммерции, имеющих веб-интерфейс. Службы компонентов используют технологию СОМ+ и обеспечивают такие функциональные возможности, как автоматическая поддержка целостности данных на основе транзакций, защита информации, основанная на ролях, доступ к различным СУБД, службам очередей сообщений (например, MSMQ) и другим приложениям.

Службы компонентов полностью интегрированы с другими компонентами и службами Windows 2000 Server. Интеграция со службами Internet Information Services и Active Server Pages упрощает создание приложений в среде Интернет/интрасети. Интеграция с кластерными службами повышает отказоустойчивость. Интеграция со службой обработки очередей сообщений (MSMQ) обеспечивает надежную, постоянную связь между приложениями.

Возможности Microsoft Transaction Server (MTS) были объединены с «классической» технологией СОМ и образовали технологию СОМ+, которая интегрирована в операционную систему Windows 2000. Оснастка ММС для управления СОМ+ — Службы компонентов (Component Services) доступна из меню Администрирование (Пуск | Программы | Администрирование | Службы компонентов).

В состав служб компонентов входит переработанный инструмент управления, реализованный в виде оснастки ММС, с помощью которого можно устанавливать пакеты MTS в СОМ+ (рис. 22.13). Ранее для этого применялись специальные инструменты MTS. Сразу после установки пакета можно использовать такие новые возможности СОМ+, как базы данных, хранящиеся в оперативной памяти (In-Memory DataBase, IMDB), или новая система поддержки событий.

Рис 22.13. Оснастка управления СОМ+ — Службы компонентов (Component Services)

Другие службы Интернета в Windows 2000

Назначение и основные возможности. Служба индексирования (Indexing Service) — служба, входящая в поставку Windows 2000 всех модификаций (включая настольную версию Professional), которая индексирует файлы на локальном жестком диске и на общедоступных дисководах в сети. Выполнять поиск можно по индексу слова в содержании файлов или в свойствах файлов. Служба индексирования возвращает список всех документов, которые соответствуют критериям поиска.

Служба индексирования создана для непрерывной работы и не требует специального сопровождения. После того как она установлена, все действия осуществляются автоматически, включая создание индексов, обновление индексов и их восстановление в случае аварийного отказа, если произошел сбой питания. Служба индексирования безотказно работает в средах, критических по параметрам надежности и доступности, где сервер должен функционировать 24 часа в сутки и 7 дней в неделю.

Служба индексирования может индексировать:

Файлы HTML
Текстовые файлы
Файлы Microsoft Office
Файлы почты Интернета
Любые другие файлы, для которых имеется фильтр документа

Основы работы. Служба индексирования создает реестр каталогов, чтобы определить, какие документы должны быть проиндексированы; этот процесс впервые запускается сразу же после установки службы. Служба индексирования автоматически выполняет либо полный просмотр, либо инкре-ментный просмотр по мере необходимости.

Полный просмотр

При полном просмотре индексируются все документы в папках, которые перечислены в списке индексируемых документов. Служба индексирования делает полный просмотр всех жестких дисков на компьютере, когда служба запущена впервые после установки, когда папка добавляется к каталогу, или во время восстановления, если произошла серьезная ошибка. Можно также принудительно выполнить полный просмотр в любое время.

Инкрементный просмотр

При инкрементном просмотре к списку документов, которые будут проиндексированы, добавляются только те документы, которые были изменены со времени последнего индексирования. Когда служба индексирования запускается (после первого раза), она производит инкрементный просмотр всех индексированных папок на дисках с файловой системой, отличной от NTFS, чтобы определить, какие файлы были изменены, когда служба не функционировала.

Инкрементный просмотр также выполняется, если система теряет уведомления об изменениях. Это может случиться, если изменилось большое количество документов, и буфер Windows 2000, используемый для получения уведомлений об изменениях, переполняется. Инкрементный просмотр, так же как и полный просмотр, можно принудительно запустить в любое время.

Для каждого документа, который будет проиндексирован, служба индексирования выполняет следующие действия:

1. Используя соответствующий документу фильтр, считывает документ, извлекает из него значения свойств документа и выделяет содержание. Сохраняет значения свойств документа и путь к документу в индексе.
2. Разбивает поток предложений на отдельные слова. Для того чтобы разбить текст на слова, служба индексирования использует процедуры, соответствующие языку документа — английскому, немецкому, японскому и т. д.
3. Удаляет незначащие слова — предлоги, междометия, вспомогательные глаголы и т. д.
4. Сохраняет оставшиеся слова и путь к документу в индексе.
5. Сохраняет значения выбранных свойств документа в кэше свойств.

Фильтры — программные компоненты, которые «понимают» структуру файла соответствующего типа, например, документа Microsoft Word или HTML. Фильтр извлекает содержание и значения свойств и посылает их ядру индексации.

Служба индексирования поставляется с фильтрами для отдельных популярных типов файлов, созданных, например, приложениями Microsoft Office. Фильтры для файлов, созданных в других приложениях, часто можно получить от поставщиков соответствующего программного обеспечения.

Требования к конфигурации компьютера. Минимальная аппаратная конфигурация для службы индексирования — та же, что и для самих систем Microsoft Windows 2000. Однако индексация и работа механизмов поиска зависят от количества и размера документов, которые будут проиндексированы, интенсивности поступления поисковых запросов и сложности запросов. На работу службы также влияет мощность компьютера. Компьютер с минимальной, аппаратной конфигурацией для Windows 2000 Server хорошо обрабатывает запросы, если число одновременных запросов не слишком высоко. Для маленькой организации этого может оказаться достаточно, но для большой организации, обслуживающей много пользователей, рекомендуется более мощная конфигурация (табл. 22.2).

Таблица 22.2. Рекомендуемые конфигурации компьютера, в зависимости от числа индексируемых документов

Если документов много, а памяти для работы службы не хватает, производительн

Число индексируемых документов Минимальный объем оперативной памяти (Мбайт) Рекомендуемый объем оперативной памяти; (Мбайт)
Менее 100000 64 64
От 100 000 до 250 000 64 От 64 до 128
От 250 000 до 500 000 64 От 128 до 256
500 000 и более 128 От 256

ость системы может серьезно понизиться. Если компьютер при функционировании службы работает медленно, можно попробовать настроить производительность службы (см. ниже). Можно улучшить производительность службы и компьютера в целом, увеличивая объем оперативной памяти и увеличивая объем памяти, выделенный для кэша свойств (property cache). Более быстрый процессор увеличивает скорость индексации и обработки запросов.

Полный объем документов, которые будут проиндексированы, и тип файловой системы также влияют на объем дискового пространства, требуемого для хранения данных службы индексирования. В файловой системе FAT пространство, необходимое для каталога, плюс временное рабочее пространство, приблизительно равно 30% объема индексируемого текста. В файловой системе NTFS требуется пространство, приблизительно равное 15% объема индексируемого текста,

Управление службой. В предыдущих версиях (входивших в состав Option Pack для Windows NT Server 4.0 иди поставлявшихся отдельно) управлять службой индексирования можно было как при помощи оснастки, так и с использованием HTML Интерфейса. В Windows 2000 оставлена только возможность управления службой индексирования с использованием оснастки (рис. 22.14).

Рис 22.14. Оснастка управления службой индексирования

Для управления службой индексирования:

1. Запустите оснастку Управление компьютером.
2. В дереве консоли разверните узел Службы и приложения | Служба индексирования (Services and Applications | Indexing Service).

Настройка производительности службы индексирования:

1. Запустите оснастку управления службой индексирования.
2. В меню Действие (Action) выберите пункт Стоп (Stop).
3. В меню Действие выберите пункт Все задачи | Настройка производительности (All Tasks | Tune Performance).
4. В диалоговом окне Применение службы индексирования (Indexing Service Usage) выберите вариант, который наиболее соответствует способу использования службы индексирования на данном компьютере.
5. Если выбран вариант Особым образом (Customize), нажмите кнопку Настроить (Customize) и перейдите к следующему шагу. Если выбран другой вариант, перейдите к шагу 9.
6. В диалоговом окне Производительность индексации (Desired Performance) переместите ползунок Построение индекса (Indexing) в сторону Отложенное (Lazy) для менее интенсивного индексирования или в сторону Немедленное (Instant) для скорейшего индексирования новых и измененных документов. Отложенное индексирование использует меньшее количество ресурсов компьютера; а немедленное — столько ресурсов, сколько возможно.
7. Переместите ползунок Скорость обработки запросов (Querying) в сторону Низкая (Low load), если ожидается обработка малого количества запросов одновременно, или Высокая (High load), если ожидается обработка большого количества запросов одновременно. Обработка с низкой скоростью использует меньшее количество ресурсов; с высокой — большее.
8. Закройте диалоговое окно Производительность индексации.
9. Закройте диалоговое окно Применение службы индексирования и запустите службу индексирования, выполнив команду Пуск (Start) меню Действие (Action).

Поиск информации с помощью службы индексирования. При поиске информации запрос посылается службе индексирования. Служба индексирования, просматривая индекс, ищет документы, соответствующие критериям запроса, и возвращает список соответствующих запросу документов пользователю (или приложению, пославшему запрос).

В дополнение к запросу по содержанию можно сделать запрос по свойствам файлов. Эти свойства включают: размер файла, даты создания и изменения, имя файла, авторов файла и т. д. Можно, например, сделать запрос по текстовым свойствам (имя файла и автор) и числовым свойствам (размер и дата изменения). Можно также сделать запрос по всем свойствам элементов ActiveX, включая пользовательские свойства документов Microsoft Office.

Поиск можно выполнять тремя способами:

С помощью команды Найти | Файлы и палки (Search | Files and Folders) меню Пуск (Start)

Можно искать любое слово (фразу), вводя это слово (фразу) в диалоговом окне Поиск файлов и папок, вызванном командой меню Пуск | Найти (рис. 22.15).

Рис 22.15. Поиск информации при помощи команды Пуск | Найти | Файлы и папки

Используя веб-страницу для передачи запроса на выполнение через Internet Information Services

Для веб-доступа владелец или администратор узла создает веб-страницу (документ HTML), из которой можно посылать на выполнение запросы. Страница может быть настроена для упрощения ввода и улучшения вида запросов и поиска информации по различным критериям. Автор страницы может также задавать отдельные индексы или части индексов, по которым нужно производить поиск. Результаты поиска возвращаются в виде веб-страницы.

При помощи оснастки

Форма запроса может быть включена в каждый каталог в службе. При помощи этой формы можно выполнять любой вид запросов, используя все возможности языка запросов. Чтобы открыть форму запроса:

1. Запустите оснастку Управление компьютером.
2. В дереве консоли разверните узлы Управление компьютером | Службы и приложения | Служба индексирования | Требуемый каталог (Опрос

каталога (Computer Management | Services and Applications [Indexing Service | Требуемый каталог \ Query the Catalog).

Форма запроса появится в правом подокне (рис. 22.16).

Рис 22.16. Поиск информации с использованием оснастки службы индексирования

Формы запросов. Служба индексирования поддерживает полную и краткую формы запросов. Запросы в полной форме создаются с использованием тэгов начала и окончания запроса, которые обозначаются фигурными скобками (<>). Тэги запроса служат для открытия и закрытия предложения запроса. Тэги запроса могут также включать уточняющие атрибуты или параметры.

Длинная форма и краткие запросы

Большинство операторов в языке запросов имеет полную форму и соответствующую краткую. Например, edocauthor — краткое имя свойства Author, в то время как — длинная форма.

Символы режима в кратких запросах

В кратких запросах следующие символы указывают режим (табл. 22;3).


Таблица 22.3. Режим запроса в краткой форме

Символ Режим
@ Запрос на поиск фразы (эквивалент )
# Запрос с регулярным выражением (эквивалент )
$ Свободно текстовый запрос (эквивалент )

Правила составления запросов. Имеются пять видов запросов:

Свободные текстовые запросы
Запросы-фразы
Запросы сопоставления с образцом
Относительные запросы
Векторно-пространственные запросы

Правила, относящиеся к запросам всех видов

  • В запросах не различаются строчные и прописные буквы.
  • Можно искать любое слово, если оно не содержится в списке исключений (рис. 22.17).
  • Для того чтобы использовать специальные символы в запросе (типа &, |, # и $), нужно заключить запрос в кавычки.
  • Значения даты и времени имеют одну из двух форм:

Первые два символа года и полного времени могут быть опущены. Если опускаются первые два символа года, дата интерпретируется как находящаяся в интервале между 1930 и 2029 гг. Трехзначное число миллисекунд может быть задано после секунд. Все даты и времена задаются в UTC (Universal Coordinated Time[ME1], Скоординированное всемирное время). Пример задания времени: 1993/11/7 12:04:23:123.

Рис 22.17. Список слов-исключений для американского английского языка

Примечание

Дата и время относительно текущей даты и времени могут быть выражены со знаком «минус» (-), за которым следует одна или более пар «целое число-единица». Единицы задаются так: у — число лет, q — число кварталов (три месяца), m — число месяцев, w — число недель, d — число дней, h — число часов, п — число минут и s — число секунд. Числовые значения могут быть заданы в десятичном или в шестнадцатеричном виде. Шестнадцатеричные значения предваряются символами «Ох».

Оператор contains. Для поиска слова или фразы в заданном свойстве можно использовать оператор contains. Если оператор не задан, по умолчанию считается заданным оператор contains. Следующие запросы эквивалентны:

@DocTitle «Что-то важное»

@DocTitle CONTAINS «Что-то важное»

Булевы операторы. Можно использовать булевы операторы and, or и мот как в запросах на вхождение в содержимое, так и в запросах по свойствам. Оператор near может применяться только в запросах по содержимому документов. Операторы в запросах могут быть записаны как в полной, так и в краткой форме (табл. 22.4).

Таблица 22.4. Полная и краткая формы операторов

Оператор Длинная форма Краткая форма
AND AND &
OR OR I
NOT AND NOT &!
NEAR NEAR Near,

Примечание

• Булевы операторы доступны только в английском написании.
• Булевы операторы рассматриваются в следующем порядке : not, and и NEAR, OR.

Текстовые запросы. Для свободных текстовых запросов можно указывать группу слов или законченное предложение. Служба индексирования находит документы, которые лучше всего соответствуют словам и фразам в свободно текстовом запросе. Булевы операторы и подстановочные символы в таком запросе игнорируются.

Запросы на поиск фразы. Чтобы искать фразу, ее нужно или заключить в кавычки, или предварить тэгом . Слова в запросе на поиск фразы должны встретиться в документе в указанном порядке, без пропуска слов.

Запросы сопоставления с образцом. Для запросов сопоставления с образцом служба индексирования выбирает документы, соответствующие образцу, который задается пользователем.

В такого рода запросах используются маски (wildcards), запросы, задающие словоформы, регулярные выражения и операторы отношений.

Относительные запросы. В таких запросах для поиска документов, свойства которых лежат в некотором диапазоне, можно использовать операторы отношения: больше, меньше, равно, не равно и т. п.

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

Можно задавать весовые коэффициенты, чтобы управлять относительной важностью терминов для получения результата. Допустимые значения весов находятся в диапазоне от 0,0 до 1,0.

Примеры запросов. В табл. 22.5 приведены примеры разнообразных запросов.

Таблица 22.5. Примеры запросов

IDocAuthor Иван*

Документы, измененные после 18 июля 1999 года, в11:05ло1ЯС

Чтобы найти Полная форма Краткая форма Результат
Заданное значение = Иван Иванов @DocAuthor = Иван Иванов Документы, созданные Иваном Ивановым
Значение, начинающееся с заданного префикса <гедех>Иван * Документы, чье свойство «автор» начинается с «Иван»
Файлы с расширением из числа заданных < regex >* . | (doc | , txt | , wri | ) < /regex > < /prop > #filename *. | (doc|, txt |, wri| ) Файлы с расширениями doc, txt или wri
Документы, измененные после некоторой даты > 99/7/18 11:05:00 @write > 99/7/18 11:05:00
Документы, измененные после относительной даты > -2d4h @write > -2d4h Документы, измененные в пределах последних 52 часов

Службы очереди сообщений

Службы очереди сообщений (Microsoft Message Queuing Services, MSMQ) — сервис, входящий в стандартную поставку Microsoft Windows 2000 Server. С помощью MSMQ приложения, работающие в разное время, могут связываться через разнородные сети и системы, способные временно работать автономно. Приложения посылают сообщения MSMQ и используют очереди MSMQ — это позволяет быть уверенным, что сообщение рано или поздно достигнет адресата. MSMQ обеспечивает гарантированную доставку сообщений, интеллектуальную маршрутизацию, защиту и передачу сообщений, основанную на приоритетах.

При помощи MSMQ конечные пользователи могут связываться через автономные сети и системы, вне зависимости от текущего состояния поддерживающих связь приложений и систем. При помощи MSMQ разработчики могут сосредоточиться на программировании бизнес-логики, а не решать проблемы работы с сетями, поскольку MSMQ обеспечивает гарантированную доставку. Администраторы систем при помощи MSMQ могут эффективно управлять большими, сложными сетями очередей сообщений.

Программные продукты с такими возможностями часто называют программным обеспечением поддержки очередей сообщений, программным обеспечением с промежуточным накоплением или средствами среднего уровня, ориентированными на сообщения (MOM, Message-Oriented Middleware).

Особенности и возможности службы MSMQ: .

Интеграция с Windows 2000 Server. Поддерживается служба Active Directory, в которой хранятся отдельные объекты MSMQ.
Работа в смешанном режиме. MSMQ может функционировать в смешанных сетевых средах, состоящих из серверов и клиентов на базе как Windows NT 4.0, так и Windows 2000.
Совместимость сверху вниз. Служба MSMQ полностью совместима с MSMQ версии 1.0.
Передача сообщений без установления логического соединения. Поскольку MSMQ использует бессеансовую модель на прикладном уровне, отправитель и получатель не обязаны применять один и тот же протокол. MSMQ поддерживает протоколы IP и IPX.
Поддержка приоритетов трафика. Приоритеты сообщений позволяют срочному или важному трафику вытеснять менее важный, что гарантирует адекватное время ответа критическим приложениям за счет менее важных приложений.
Гарантированная доставка. Сообщения помещаются в хранящуюся на диске очередь, что обеспечивает гарантированную доставку сообщений.
Транзакции. Имеется возможность использования транзакций MSMQ, т. е. можно объединить несколько действий MSMQ в транзакцию и обеспечить гарантированную доставку сообщений, а также то, что они будут доставлены не более одного раза или что доставленные сообщения будут успешно извлечены из очереди адресатом.
Динамические очереди. Администраторы могут изменять свойства очередей без воздействия на приложения передачи сообщений.
Маршрутизация. MSMQ поддерживает интеллектуальную маршрутизацию, которая основана на физической топологии сети, группировке сеансов и на обеспечении транспортной связности. Группировка сеансов облегчает эффективное использование медленных линий.
Безопасность. MSMQ поддерживает механизмы безопасности: управление доступом, аудит, шифрование и аутентификацию. Управление доступом реализовано с применением системы безопасности Windows 2000 и цифровых подписей. Аудит реализован при помощи службы регистрации событий Windows 2000. Шифрование и аутентификация (использование цифровых подписей) обеспечиваются при помощи механизмов открытых и закрытых ключей.
Широкая интеграция систем. Приложения MSMQ могут выполняться на целом ряде аппаратных платформ, использующих продукты для обеспечения связи со службой MSMQ, поставляемые фирмой Level 8 Systems, партнером Microsoft, Исходно MSMQ поддерживает Windows NT, Windows 95 и Windows 98. Поддержка остальных систем поставляется фирмой Level 8 Systems.
Среда программирования MSMQ.. Прикладной интерфейс MSMQ позволяет разрабатывать приложения MSMQ на языке С или C++. MSMQ также включает элементы управления СОМ, которые можно применять для создания приложений MSMQ в Microsoft Visual Java (VJ), Visual Basic (VB) или любых других приложений-контейнеров СОМ (например, Microsoft Access или Borland/Inprise Delphi). При помощи Microsoft ASP и Microsoft US можно интегрировать MSMQ-приложение с веб-страницами и формами, использующими элементы управления СОМ. При помощи MAPI Transport Provider и Exchange Connector можно интегрировать приложение MSMQ с формами Exchange и клиентами MAPI. Транспорт MSMQ

RPC можно использовать для создания надежных приложений, использующих вызовы RPC.

Установка MSMQ. Чтобы добавить или удалить службу:

1. В меню Пуск (Start) выберите команду Настройка (Settings) | Панель управления (Control panel) | Установка/удаление программ (Add/Remove Programs).
2. В левой панели диалогового окна Установка/удаление программ выберите вкладку Добавление/удаление компонентов Windows.
3. Откроется окно Мастер компонентов Windows (Windows Components Wizard). В списке Компоненты Windows (Windows Components) выберите опцию Службы очереди сообщений (Message Queuing Services) (рис. 22.18).
4. Нажмите кнопку Далее (Next) и следуйте командам мастера.

Рис 22.18. Установка служб очереди сообщений

Примечание

Сначала нужно установить сервер MSMQ на контроллере домена Windows 2000 (в группе серверов, объединенных территориально), а затем можно устанавливать программное обеспечение MSMQ на других компьютерах. Сервер MSMQ не может быть установлен на компьютерах, работающих под управлением Windows 2000 Professional.

Служба MSMQ в Windows NT 4.0 и Windows 2000. Перечислим общие задачи управления службой MSMQ. Интерфейс пользователя для выполнения этих задач отличается в Windows 2000 от интерфейса в Windows NT 4.0.

В табл. 22.6 перечислены отличия в терминологии и в архитектуре предыдущих версий от текущей версии MSMQ.

Таблица 22.6. Управление службой MSMQ в Windows 2000 и в Windows NT 4.0

Необходимое действие Windows NT 4.0 Windows 2000
Управление доступом, установка аудита или изменение владельца для Message Queuing MSMQ Explorer Оснастка Active Directory- пользователи и компьютеры (Active Directory Users and Computers)
Изменение учетной записи для службы MSMQ Значок Services на панели управления Оснастка Управление компьютером (Computer Management)
Настройка параметров маршрутизации MSMQ Explorer Оснастка Active Directory — пользователи и компьютеры
Создание внешних (foreign) узлов или добавление внешних компьютеров MSMQ Explorer Оснастка Active Directory-пользователи и компьютеры
Добавление, удаление и настройка компьютеров MSMQ; установка квот для компьютеров или изменение свойств MSMQ Explorer Оснастка Active Directory — пользователи и компьютеры
Установка параметров IPX/SPX для компьютеров MSMQ Значок Network на панели управления Значок Сеть и удаленный доступ к сети (Network arid Dialup Connections) на панели управления
Создание, удаление и настройка очередей; установка квот очереди или изменение свойств MSMQ Explorer Оснастка Active Directory — пользователи и компьютеры
Просмотр и удаление сообщений; просмотр свойств сообщений MSMQ Explorer Оснастка Active Directory — пользователи и компьютеры

Управление службой MSMQ. Управление MSMQ на локальном компьютере осуществляется при помощи оснастки Управление компьютером — узел Службы и приложения | Очередь сообщений. Основное управление объектами MSMQ в организации осуществляется с применением оснастки Active Directory — пользователи и компьютеры. Для управления MSMQ в организации:

1. Запустите оснастку Active Directory — пользователи и компьютеры.
2. В дереве консоли разверните узел Active Directory — пользователи и компьютеры.
3. В меню Вид (View) выберите пункт Пользователи, группы и компьютеры как контейнеры (Users, Groups and Computers as Containers), а затем в том же меню выберите пункт Дополнительные функции (Advanced Features).
4. В дереве консоли найдите нужный домен, затем подразделение, наконец нужный компьютер, на котором установлена MSMQ, щелкните правой кнопкой мыши на узле msmq и в контекстном меню выберите пункт Свойства (Properties).

Службы Windows Media

Службы Windows Media в составе Microsoft Windows 2000 — это группа служб, которые предназначены для передачи клиентам аудио- и видеоинформации при помощи одноадресного и группового вещания. Службы Windows Media используются также для передачи файлов клиентам. Поставляемое содержимое может быть создано, приобретено у поставщика или передаваться с телевизионных камер и микрофонов. В последнем случае его называют живым потоком (live stream).

Пользователи могут обращаться к поставляемому содержимому через Интернет, через корпоративную или образовательную интрасеть или через специализированные группы, которые получают содержимое в выделенной сети или в интрасети.

На рис. 22.20 будет представлена схема, которая иллюстрирует общую технологию доставки клиентам файлов типа Advanced Streaming File (ASF, Усовершенствованный потоковый файл).

Как показано на схеме, для создания содержимого файлов ASF применяются средства Media Services — Windows Media Author, VidToASF и WavToASF.

Для передачи живого потока можно использовать Кодировщик Windows Media (Windows Media Encoder) вместе с видеокамерой и микрофоном, чтобы кодировать содержимое в поток ASF, который службы Windows Media могут передавать пользователям. Кодировщик также может записывать поток ASF, который он кодирует в файл ASF для дальнейшего воспроизведения.

Службу можно применять для различных целей, например для распространения информации, для организации информационных, развлекательных и маркетинговых узлов, для обучения, управления и т. д.

Новые возможности. Потоковые мультимедийные службы в составе Microsoft Windows 2000 предоставляют многочисленные новые возможности для доставки потокового аудио- и видео-содержимого:

Улучшенное качество
Расширенный набор серверных компонентов
Программное обеспечение для кодирования информации
Большее количество инструментов
Поддержка в Проигрывателе Windows Media (Windows Media Player)
Большее количество сервисных возможностей

Состав служб Windows Media. Службы Windows Media собтоят из служб-компонентов и административной утилиты — Администратор Windows Media (Windows Media Administrator).

Службы Windows Media. Windows Media — набор служб, работающих под управлением Microsoft Windows 2000 Server. Эти службы предназначены для передачи звуковой и видеоинформации при помощи одноадресного и группового вещания клиентам.
Администратор Windows Media. Администратор Windows Media — набор веб-страниц, который функционирует в окне браузера Microsoft Internet Explorer версии 5.0 и управляет службами-компонентами Windows Media. При помощи администратора Windows Media можно управлять локальным сервером или одними или несколькими удаленными серверами Windows Media. Чтобы управлять несколькими серверами, нужно добавить серверы в список серверов, а затем соединиться с сервером, которым не обходимо управлять.

Администратор Windows Media (рис. 22.19) может функционировать (помимо Windows 2000) на Microsoft Windows 98 или Microsoft Windows NT 4.0 с установленными Service Pack 4 (SP4) и Microsoft Internet Explorer 5.0. Администратор Windows Media также работает и с Internet Explorer 4.01 или под Microsoft Windows 95, но эти платформы официально не поддерживаются.

Вот основные процедуры, которые обычно выполняются при работе с Администратором Windows Media:

Чтобы запустить Администратор Windows Media:

Нажмите кнопку Пуск (Start) и выберите команду Программы | Администрирование | Windows Media (Programs | Administrative Tools | Windows Media).

Чтобы соединиться с сервером Windows Media:

В окне Администратор Windows Media в списке выберите сервер, который необходимо администрировать.

Примечание

Если сервер, который нужно администрировать, не виден в списке серверов или список серверов вообще пуст, необходимо добавить сервер в список сервeров.
Чтобы добавить сервер к списку серверов:

В окне Администратор Windows Media нажмите кнопку Добавить сервер

(Add Server), а затем введите имя сервера в поле Сервер (Server).

Чтобы удалить сервер из списка серверов:

Выберите имя сервера в списке и нажмите кнопку Удалить сервер (Remove Server). Администратор Windows Media отключается от сервера, а имя сервера удаляется из списка серверов.

Рис 22.19. Администратор Windows Media

Клиентское программное обеспечение. Программный клиент, получающий данные с сервера Windows Media, называется Проигрыватель Windows Media (Windows Media Player) (рис. 22.20). Службы Windows Media используют Проигрыватель Windows Media, чтобы воспроизводить потоки ASP, которые могут включать видеоинформацию, звук, изображения, URL и сценарии.

Средства Windows Media. Следующие инструменты и утилиты предназначены для служб Windows Media, чтобы создавать и модифицировать данные, которые публикуются при помощи сервера Windows Media:

Кодировщик Windows Media (Windows Media Encoder) — средство, которое может преобразовывать как «живую», так и сохраненную звуковую и видео — информацию в поток ASF, который передается при помощи сервера Windows Media. Для добавления специальных возможностей к потоку данных можно использовать язык сценариев. Команды сценария позволяют выполнить синхронный переход к заданному веб-узлу, отображение и пролистывание страниц, предоставить оценочную информацию или создать сообщение электронной почты. Как только поток создан, он может быть записан в файл *.asf для дальнейшего проигрывания:
Windows Media Author — инструмент, разработанный Microsoft совместно с компанией Digital Renaissance, Inc. Этот инструмент служит для трансляции, синхронизации и сжатия звуковых данных и картинок в единый файл *.asf. Информация Windows Media, которая создается при помощи этого инструмента, называется иллюстрированным звуком, поскольку содержит слайды, связанные со звуковой дорожкой. Windows Media Author также может добавлять команды сценариев и URL к файлам *.asf.
Windows Media ASF Indexer — инструмент, который редактирует время начала и остановки файлов *.asf и индексирует их. Он также служит для создания маркеров, свойств и команд сценариев для файла *.asf.
VidToAsfu WavToAsf— утилиты преобразования, работающие из командной строки сервера. Служат для конвертирования существующих аудио-и видеофайлов в формат ASF.
Рис 22.20. Проигрыватель Windows Media в качестве клиента служб Windows Media

ASFCheck ASFChop и ASX3TEST — файловые утилиты, работающие из командной строки на сервере. ASFCheck служит для проверки формата файла *.asf и восстановления файла, если это возможно. С помощью ASFChop можно добавить свойства, маркеры, индексы и команды сценариев к файлу *.asf и удалять отрезки времени из файла *.asf. С помощью ASX3Test можно проверить синтаксис файла *.asx, созданного в текстовом редакторе.

Форматы. Службы Windows Media предоставляют возможность доставки мультимедийной информации большому количеству клиентов, использующих форматы ASF, WMA и WAV.

Клиенты могут проигрывать такие файлы, не загружая их целиком, поскольку они принимаются по сети в виде потоковых данных. Потоковая передача данных существенно уменьшает время загрузки и требования к памяти на клиентской стороне. Она также позволяет транслировать данные неограниченной длины, например, предоставляет возможность живых трансляций.

Службы Windows Media используют формат ASF — открытый стандарт, который поддерживает доставку данных поверх многих сетей и протоколов. ASF служит для упорядочения* организации и синхронизации мультимедиа-данных для передачи при помощи потока по сети. ASF — формат файлов; однако он может также обеспечить передачу живой трансляции. Формат ASF оптимизирован для передачи потоков мультимедиа по сетям, но oн подходит и для хранения записей.

Кодировать потоки ASF можно по любому алгоритму декомпрессии и сжатия (кодер-декодер, кодек). Информация, сохраненная в потоке ASF, может использоваться для определения клиентского, какой кодер-декодер необходим, чтобы декомпрессировать поток. Кроме того, потоки ASF могут быть переданы по любому базовому сетевому протоколу передачи дайнных.

Звуковой файл Windows Media, имеющий расщирение wma, является файлом *.asf, содержащим только звук, сжатий при помощи Micresoft Audio Codec. Этот тип отличается от файлов *.asf только по расширению. Сервер Windows Media может передавать файлы * .wma. Можно публиковать файлы *.wma при помощи файлов *.wax с использованием диспетчера программ. Компания Microsoft создала файлы *.wma для пользователей, которые могут проигрывать только звук.

Предоставление данных по требованию

Это один из способов, при помощи которых пользователь может получать потоковую информацию с сервера Windows Media. Coединение по требованию — активное соединение между клиентом и сервером При соединении по требованию пользователь инициализирует клиентское соединение с сервером, выбирая соответствующий ресурс. Содержание передается с сервера клиенту в потоке ASF. Если файл индексирован, пользователь может запустить, остановить, перемотать назад или вперед или приостановить поток. Соединения по требованию предоставляют большие возможности по управлению потоком, но они могут быстро исчерпать полосу пропускания сети, поскольку каждый клиент устанавливает свое собственное соединение с сервером.

Протоколы. На рис. 22.21 представлена диаграмма использования протоколов для организации взаимодействия между компонентами системы Windows Media.

Рис 22.21. Протоколы передачи потоков мультимедийных данных

Все компоненты могут взаимодействовать через протокол HTTP, что позволяет им связываться, даже если они разделены брандмауэром.

Клиенты, которые подключаются к серверу при помощи группового вещания, не используют никакого специального протокола; они принимают данные, которые получают по групповому IP-адресу и не нуждаются в установке соединения.

Протокол MMS

Протокол MMS (Microsoft Media Stream) предназначен для обращения к одноадресным ресурсам Windows Media. MMS используется по умолчанию для соединения с одноадресными службами Windows Media. Вводя в программе Проигрыватель Windows Media URL-адрес ресурса, к которому необходимо присоединиться, нужно указать протокол MMS и ссылку на нужный поток. При соединении с точкой публикации (publishing point) по протоколу MMS для выбора оптимального соединения используется просмотр (rollover) протоколов. Просмотр протоколов начинается с попытки установления соединения с сервером через MMSU. MMSU — протокол MMS, объединенный с UDP-транспортом данных. Если соединение MMSU потерпело неудачу, сервер пытается использовать MMST. MMST — протокол MMS, объединенный с TCP-транспортом данных.

Если при воспроизведении (проигрывании) индексированного файла *.asf требуются возможности ускоренной перемотки вперед, перемотки, паузы, запуска и остановки потока, необходимо применять протокол MMS. Ускоренная перемотка вперед и назад при использовании UNC-пугей недоступна. Когда устанавливается соединение с точкой публикации при помощи автономного проигрывателя Windows Media, нужно определить URL, указывающий на источник потока: rams: / /Mediaserver/exantple.asf

где Mediаserver— имя сервера Windows Media, a example.asf— имя файла *.asf, который требуется проиграть.

Протокол MSBD

Протокол MSBD служит для распределения потоков между кодировщиком Windows Media и компонентами сервера Windows Media и передачи потоков между серверами. MSBD — ориентированный на соединение протокол, оптимизированный для использования с потоками данных. MSBD нужен при испытании соединения между клиентом и сервером и для проверки качества потока ASF, но он не должен применяться в качестве основного метода приема данных ASF. Кодировщик Windows Media может поддерживать максимум 15 клиентов MSBD; сервер Windows Media может поддерживать максимум 5 клиентов MSBD.

Протокол HTTP

Если нужно передавать поток данных через брандмауэр (межсетевой экран) или другой фильтр трафика, который разрешает передачу только протокола HTTP, можно передавать потоковые данные по этому протоколу. Потоковый HTTP можно использовать для передачи потока от Кодировщика Windows Media до межсетевого фильтра на сервер Windows Media, а также чтобы подключаться к серверам Windows Media, которые отделены брандмауэром.

Применение потокового HTTP. Потоковый HTTP полезен для доставки потока через устройства обеспечения безопасности сети, поскольку потоковый HTTP обычно использует порт 80, а большинство брандмауэров не запрещает это. Компоненты сервера Windows Media по умолчанию настроены для применения потокового протокола MMS. Однако можно настроить компоненты сервера Windows Media, чтобы вместо MMS использовать потоковый HTTP. Потоковый HTTP — рекомендуемый вариант передачи потокового содержимого ASF через сетевые экраны.

В состав компонентов сервера Windows Media включены два типа служб — Одноадресная служба Windows Media (Windows Media Unicast Service) и Служба станции Windows Media (Windows Media Station Service). Следует выбрать, какой из компонентов сервера Windows Media будет использовать потоковый HTTP, поскольку оба они не могут одновременно работать с потоковым HTTP, т. к. не могут быть связаны с одним портом. Одноадресная служба Windows Media по умолчанию связана с портом 1755, а служба станции Windows Media — с портом 7007.

Чтобы редактировать порт, который служба использует для потокового HTTP:

1. Запустите редактор системного реестра.
2. В окне редактора реестра с помощью дерева реестра разверните ключ:
3. Выберите ключ HTTPPort и дважды щелкните левой кнопкой мыши. Откроется окно Изменение параметра DWORD (DWORD Editor).
4. Выберите опцию Десятичная (Decimal). Данные в поле должны быть равны 80.
5. Введите нужный номер порта для потокового протокола HTTP.

Изменение порта, с которым связана служба HTTP. Служба HTTP в IIS по умолчанию связана с портом 80. Если компоненты сервера Windows Media работают совместно на компьютере, на котором установлена веб-служба, и для Windows Media разрешена поддержка потокового HTTP, то такое совместное использование веб-сервера и Windows Media может привести к конфликту при привязке обеих служб к TCP-порту 80.

Изменение порта, к которому привязана служба HTTP, может разрешить конфликты портов, но также может привести к некорректной работе службы HTTP. Большинство входящих соединений по протоколу HTTP происходит через порт 80. Если порт 80 невозможно использовать, то клиентский браузер покажет сообщение об ошибке, что приведет к невозможности просмотра содержимого веб-сервера.

Для изменения порта; выделенного службе Windows Media для потокового HTTP:

1. Запустите редактор системного реестра.
2. В окне редактора реестра с помощью дерева реестра разверните ключ: HKEY_mCAL_MACHINE\System\CurrentControlSet\Services\nsstatipn \Parameters\
3. Выберите ключ HTTPPort и выполните двойной щелчок. Откроется окно Изменение параметра DWORD (DWORD Editor).
4. Выберите опцию Десятичная (Decimal). Поле данных должно содержать число 80.
5. Введите нужный номер порта для потокового HTTP.

Примечание

Право на внесение изменений в системном реестре при помощи редактора системного реестра зависит от разрешений доступа. Неправильное редактиррг вание системного реестра может нарушить работоспособность системы. Перед внесением изменений в системном реестре сделайте резервные копии всех ценных данных на этом компьютере.

Работа служб Windows Media и IIS на одном сервере. Компоненты сервера Windows Media и службы Microsoft Internet Information Services (IIS) могут сосуществовать на компьютере, когда используются значения по умолчанию по привязке к портам (одноадресная служба Windows Media связана с портом 1755, служба станции Windows Media — с портом 7007, a IIS — с портом 80).

Одноадресная служба Windows Media и служба станции Windows Media должны иметь доступные IP-адреса со свободным портом 80 для передачи потоковых данных ASF через протокол HTTP. Чтобы использовать потоковый HTTP, когда компоненты сервера Windows Media и IIS установлены на том же самом компьютере, требуются следующие условия:

По крайней мере два IP-адрееа, связанных с сетевой платой
Уникальная ресурсная запись типа А на сервере DNS для IP-адреса сервера Windows Media и IP-адреса сервера IIS


Чтобы разрешить потоковый протокол HTTP для компонентов сервера, которые работают на том же компьютере, что и IIS:

1. Назначьте IP-адрес веб-узлу в IIS:
2. Разрешите протокол потоковый HTTP для компонентов сервера Windows Media. Можете разрешить потоковый HTTP для одноадреснрй службы либо для службы группового вещания.
3. Отредактируйте системный реестр, чтобы службы компонентов Windows Media зависели от службы веб-публикации.

Чтобы назначить IP-адрес веб-узлу в IIS:

1. В окне оснастки управления IIS выберите компьютер, на котором установлены службы Windows Media.
2. В контекстном меню узла Веб-узел по умолчанию (Default Web site) выберите пункт Свойства (Properties). Откроется диалоговое окно свойств.
3. Перейдите на вкладку Веб-сайт (Web site).
4. На вкладке в поле IP-адрес (IP address) введите значение IP-адреса, которое должен использовать IIS.
5. Повторите шаги 2 до 4 для любых дополнительных веб-узлов, которые установлены в IIS, включая административный узел.

Чтобы отредактировать системный реестр так, чтобы одноадресная служба Windows Media или служба станции Windows Media зависели (запускались после другой службы) от веб-сервера:

1. Запустите редактор системного реестра.
2. Чтобы изменить настройки одноадресной службы Windows Media, в окне редактора реестра с помощью дерева реестра разверните ключ:

Или, чтобы изменить настройки службы станции Windows Media, в окне редактора реестра с помощью дерева реестра разверните ключ:

3. Дважды щелкните на ключе DependOnService. Откроется окно многострочного редактора,
4. В конце списка служб введите vosvc. vbsvc — установка, которая делает компоненты сервера Windows Media зависящими от сервера IIS.
5. Перезапустите компьютер.

Определение типа MIME для служб Windows Media в IIS. На веб-сервере должны быть заданы типы MIME (Multipurpose Internet Mail Extensions), чтобы сервер имел информацию о том, что делать в случае получения запроса на доступ к ресурсу с неизвестным расширением файла, например asf и asx. Без этой записи веб-сервер не сможет интерпретировать файл.

Динамическая проверка прав доступа для ASP.NET MVC

В ASP.NET MVC есть встроенная возможность ограничить доступ к тем или иным контроллерам и их действиям. Эта возможность предоставляется атрибутом AuthorizeAttribute , но возможностей и гибкости ему явно не хватает (точнее их практически нет). Права можно определить только на этапе разработки и без повторной компиляции никак не изменить. А ведь создать собственный атрибут, обладающий необходимым функционалом совсем не сложно.

Итак, приступим. Создаём новый проект в Visual Studio, тип выбираем ASP.NET MVC 3 Web Application, называем DynamicAuthorize. Ждём, пока студия сгенерирует проект.
Каким образом хранить и определять права доступа можно различными способами: в БД , получать с удалённого сервиса, в xml-файле и т.д. Всё зависит от задачи и вашего предпочтения. Для примера же, чтобы не отвлекаться на реализации этих механизмов сделаем класс, возвращающий сведения о разрешениях, заменить его на нужную вам реализацию, думаю проблем не вызовет. Собственно класс PermissionManager :

Класс элементарен, поэтому объяснять что он делает, думаю не стоит. Что же касается непосредственно авторизации, то в MVC есть интерфейс IAuthorizationFilter , в котором определён единственный метод OnAuthorization . Этот метод вызывается при необходимости авторизовать пользователя, т.е. проверить имеет ли он права на данную операцию. Это как раз то, что нам нужно. Ну хватит теории, приступаем к созданию непосредственно атрибута, т.е. класса DynamicAuthorizeAttribute :

В передаваемом параметре типа AuthorizationContext имеется множество полезных свойств, дающих возможность организовать проверку прав доступа множеством способов, но в данном случае проверка элементарна, мы просто воспользуемся методом класса PermissionManager .
На этом, собственно, создание динамической авторизации закончено. Я же говорил, что это не сложно. Ну что, приступаем к тестам. Создадим два дополнительных действия (два нам любезно создала студия) контроллера Home :

Создаём для них представления (я воспользовался генератором Visual Studio)
И помечаем контроллер нашим, только что созданным атрибутом:

Добавляем в представление Index ссылки на созданные действия контроллера:

Теперь необходимо собрать проект, нажимаем Ctrl+Shift+B, должно получится без ошибок.
Теперь создадим тестовых пользователей, запускаем ASP.NET Admin tools

Переходим в раздел «Безопасность» и добавляем 2-х пользователей с именами user1 и user2. Всё можно запускать проект. Теперь если нажать на одну из ссылок не авторизовавшись, получите ошибку доступа. Если авторизоваться как user1, будет доступен действие Test, но не доступно Edit. Если зайти как user2, то всё наоборот.
В заключение хотел бы сказать, что несмотря на простоту реализации, у новичков часто возникает вопрос как организовать динамическую проверку прав доступа. Надеюсь этот пост поможет людям, столкнувшимся с этим вопросом, справиться с ним и сделать авторизацию именно такой, какой она была задумана.
Скачать проект можно здесь.

доступ к файлам ASP.NET на другом компьютере общей папке

У меня есть ASP.NET проект, сделать некоторый доступ к файлам и манипуляции, методы, которые я использую для доступа к файлам ниже. Теперь мне нужно получить доступ к файлам на другой общей папке сервера, как это сделать? Я легко могу изменить путь к файлу общего пути к папке, но я получаю сообщение «не могу получить доступ к» ошибке, потому что акции защищено пароль. Как я понимаю, мне нужно как-то отправить учетные данные на удаленный сервер перед выполнением методов ниже. Как это сделать?

С уважением, Томас

Приложение ASP.NET (по умолчанию) будет выполняться в IIS6 под учетной записью компьютера «ASPNET». Поэтому у вас есть несколько вариантов:

  • Настройка приложения ASPNET для запуска под (слабой) учетной записью домена с правами на доступ к общему ресурсу удаленного компьютера
  • Установите разрешения на акцию, чтобы обеспечить доступ к «Everybody» (не рекомендуется)
  • Отключить проверку подлинности с помощью форм и использовать проверку подлинности Windows, в приложении ASP.NET. Выключите олицетворения в web.config и IIS должны передать полномочия пользователя, который в настоящее время с помощью веб-приложения до основной акции (я думаю).

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

Средства безопасности ASP.NET. Часть 2 — Авторизация

Первая часть статьи была посвящена аутентификации. В ней были рассмотрены теория аутентификации, разобраны все три способа аутентификации в среде .NET Framework. Во второй части статьи будет рассмотрен ещё один аспект компьютерной безопасности — авторизация. Для начала напомним, что же такое авторизация. Авторизация — это проверка прав доступа к определённому ресурсу, или проверка привилегий на выполнение определённых действий. В качестве примера можно привести ограничение прав доступа к определенным файлам. Давайте посмотрим на вопрос авторизации не глазами пользователя, а глазами программиста, который сам диктует правила игры.

Среда ASP.NET предоставляет два способа авторизации:

  1. Авторизация доступа к файлу
  2. Авторизация доступа к URL

Авторизация доступа к файлу

Суть авторизации доступа к файлу (File Authorization) заключается в настройке политики безопасности для конкретного файла в отдельности. При этом все параметры зависят от поддерживаемых средств безопасности Windows.

При авторизации доступа к файлу применяются списки контроля доступа ACL (Access Control List), в которых содержится информация о том, кому разрешён доступ к определённому ресурсу. Список контроля доступа последовательно просматривается на совпадение текущего зарегистрировавшегося пользователя с компонентами списка, если совпадений не будет, то система вернёт сообщение о том, что нет права доступа к данному ресурсу.

В связи с тем, что авторизация доступа к файлу основывается на системных механизмах ОС, при аутентификации тоже необходимо использовать аутентификацию Windows. Для этого в файле конфигурации проекта должна присутствовать следующая строка: Этот атрибут в проекте ASP.NET Web Application установлен по умолчанию, поэтому нет необходимости вручную вносить изменения в файл конфигурации.

Чтобы посмотреть, как действует этот механизм, создайте новый проект типа ASP.NET Web Application, переименуйте страницу ASP.NET в default.aspx и введите следующий код (листинг 1).

Листинг 1. default.aspx

Теперь откройте Explorer и найдите этот файл (по умолчанию он должен находиться по следующему адресу: C:\Inetpub\wwwroot\ \default.aspx). Далее щёлкните по нему правой кнопкой мыши и откройте окно свойств. Перейдите на вкладку Безопасность и добавьте в список допустимых имён группу администраторов (см. рисунок 1). Запустите Web-приложение, и если текущий пользователь является членом группы администраторов, то вы увидите дружелюбное приветствие, если же нет, то соответствующее сообщение об ошибке.

Рисунок 1. Установка авторизации доступа к файлу

Авторизация доступа к URL

Авторизация доступа к файлу — это старая технология, имеющая ряд недостатков: необходимость поддержки списков контроля доступа, более того, при передаче файлов по протоколу FTP списки ACL часто теряются, что зачастую приводит к нежелательным последствиям.

ПРИМЕЧАНИЕ

Сервер IIS поддерживает только авторизацию доступа к файлам, что в свою очередь сказалось на предыдущих версиях ASP, т. е. они тоже поддерживали лишь этот вид авторизации. Авторизация доступа к URL является новшеством, появившемся в ASP.NET. Кроме этого, если в настройках сервера IIS запрещен анонимный доступ, то управление авторизацией осуществляется сервером IIS, а если анонимный доступ к Web-узлу разрешён, то авторизацию уже контролирует ASP.NET.

Для использования авторизации доступа к URL сначала нужно настроить файл конфигурации проекта. За настройку авторизации отвечает тэг , который может содержать в себе только два типа элементов:

Каждый из этих элементов поддерживает 3 атрибута:

  • users — задаёт разделённый запятыми список имён пользователей.
  • roles — задаёт разделённый запятыми список имён пользовательских групп.
  • verbs — задаёт выражения HTTP, к которым применимы тэги и . Допустимыми значениями являются: GET, HEAD, POST и *, активизирующая все вышеперечисленные режимы.

Атрибут users поддерживает два специализированных обозначения:

  • » * » — все пользователи;
  • «?» — анонимные пользователи.

В этом фрагменте файла конфигурации мы сначала запрещаем доступ всем пользователям, а потом открываем его для двух пользователей: Steve и Mary . Кроме этого, можно свободно смешивать настройки параметров для пользователей и для групп:

В вышеприведённом листинге мы сначала открыли доступ для всех, но потом закрыли его для не зарегистрировавшихся пользователей, т. е. работающих анонимно, и для всех членов группы BUILTIN\Guests . Здесь BUILTIN обозначает коллекцию встроенных ролей, поддерживаемых ASP.NET. Чтобы просмотреть их полный список, вы можете обратиться к следующему перечислению в окне ObjectBrowser Visual Studio.NET:

Вместо ключевого слова BUILTIN вы также можете указывать непосредственно имя домена, на котором хранятся эти группы.

ПРИМЕЧАНИЕ

Для быстрой проверки работоспособности этого типа авторизации вы можете воспользоваться предыдущим примером (см. листинг 1). Для того, чтобы увидеть результат от соответствующего источника, удалите настройки авторизации доступа к файлу, т. е. отмените все установленные ограничения для файла default.aspx . После этого настройте файл конфигурации так, чтобы вашему текущему пользователю был запрещён доступ к узлу. Если всё было выполнено верно, то вы можете увидеть перед своими глазами картину, похожую на рисунок 2.

Рисунок 2. Отказано в доступе

Во всех предыдущих примерах файлов конфигурации проекта мы задавали ограничения на весь Web-узел, а часто нужно задать эти параметры лишь для определённых директорий или файлов. Для решения этой проблемы в файле конфигурации проекта ASP.NET поддерживается специальный тэг, который ограничивает распространение политики авторизации — это тэг . Этот элемент имеет всего два атрибута:

  • path — задаёт путь к ресурсу, для которого будут применены параметры авторизации;
  • allowOverride — разрешает или запрещает (значения true или false соответственно) перекрывать параметры настройки тэга location данными из других файлов конфигурации.

Предположим, у нас есть проект с тремя папками, в каждой из которых содержится информация для соответствующих пользователей, и нам нужно разграничить доступ к информации между группами пользователей. Следующий фрагмент (листинг 2) файла Web.config демонстрирует применение тэга location для достижения этой цели.

Листинг 2. Разграничения прав доступа пользователей

В данном примере параметры авторизации проекта настроены так, что в корневом каталоге доступ разрешён всем: предполагается, что в нём находится страница регистрации, через которую должен пройти каждый ещё не зарегистрировавшийся пользователь. Следующий тэг определяет настройки безопасности для файла admin.aspx, расположенного в папке admin_zone: к нему доступ открыт лишь членам группы Administrators. Далее указываются настройки безопасности для папки user_zone, куда разрешён доступ членам групп Users и Administrators. И, наконец, последний путь — это папка guest_zone: ко всем ресурсам, содержащимся в ней, могут обратиться анонимные пользователи и пользователи, являющиеся членами двух уже ранее названных групп — Users и Administrators.

Ролевая безопасность с применением аутентификации на основе формы

Все предыдущие примеры были ориентированы на применение средств безопасности Windows: это была и аутентификация Windows, имена пользователей и групп тоже принадлежали политике безопасности ОС. Но в некоторых случаях возникает необходимость применения в Web-проекте аутентификации на основе формы, а также выбор такого средства авторизации, которое бы не зависело от настроек безопасности сервера. И такое средство существует: вы по-прежнему продолжаете использовать аутентификацию формой, авторизацию доступа к URL, но информация о пользователях и ролях хранится не в каталоге безопасности Windows, а в любом другом месте.

Чтобы воплотить эту технологию авторизации в жизнь, давайте создадим новый Web-проект и отредактируем файл Web.config следующим образом (листинг 3).

Листинг 3. Web.config

В этом примере мы поместили в одну процедуру две операции проверки: одна — аутентификации, другая — авторизации. Сначала мы проходим аутентификацию, запрашивая данные на пользователя с таким-то именем и паролем из базы. Если пользователь не был найден, выводим соответствующее сообщение об ошибке (см. 4 строку снизу). Если же пользователь обнаружен, то мы определяем его роли, опять запрашивая информацию из базы данных. На основе полученных сведений о ролях формируется аутентификационный билет, который впоследствии шифруется и сохраняется в cookie-файле. И, наконец, пользователь благополучно возвращается на страницу default.aspx.

Поскольку в нашем файле конфигурации были прописаны ограничения доступа для нескольких файлов, то давайте разберём их содержимое (листинг 7).

Листинг 7. default.aspx

После создания этого простого Web-узла вы сможете собственными глазами увидеть плоды своего труда. В приведённом коде указаны все инструкции, необходимые для создания действующей системы безопасности для сайта на базе аутентификации формой и авторизации с помощью URL.

Заимствование полномочий

Заимствование полномочий — это такой режим работы, при котором приложение ASP.NET функционирует от имени конкретного пользователя. Казалось бы, какой смыл вводить заимствование полномочий, если при аутентификации Windows пользователь и так заходит под конкретной учётной записью? Но всё дело в том, что идентификатор пользователя при аутентификации и идентификатор пользователя при заимствовании полномочий — это разные вещи, и применяются они соответственно для получения различной информации.

По умолчанию режим заимствования полномочий в среде ASP.NET отключён. Для его активизации нужно добавить в файл Web.config тэг и присвоить его атрибуту impersonate значение true. Следующий фрагмент файла конфигурации проекта демонстрирует, как это должно выглядеть:

Для демонстрации работы этого режима, используйте следующий код (листинг 8) в странице default.aspx:

В обработчике события загрузки формы для получения идентификатора пользователя объекта WindowsIdentity используется метод GetCurrent, возвращающий идентификатор учётной записи, от имени которой функционирует процесс ASP.NET.

При запуске этого приложения с отключенным заимствованием полномочий ( ) перед вами появится экран, представленный на рисунке 3. Как можно наблюдать, при отключенном заимствовании полномочий в объекте WindowsIdentity содержится идентификатор системного пользователя ASPNET.

ПРИМЕЧАНИЕ

Проследите, чтобы в этом примере анонимный доступ был запрещён

Рисунок 3. Запрещённые заимствование полномочий и анонимный доступ

Теперь, если вы активизируете заимствование полномочий, то увидите результат, представленный в таблице 1.

Таблица 1. Включенное заимствование полномочий и отключенный анонимный доступ

IsAuthenticated True
Authentication type Negotiate
Name BIGDRAGON\B@k$
IsAuthenticated True
Authentication type NTLM
Name BIGDRAGON\B@k$

Как видите, результаты одинаковые, поскольку оба объекта получают информацию о текущем пользователе. Но предыдущие два примера были ориентированы на условия с запрещённым анонимным доступом для аутентификации средствами Windows. Если разрешить анонимный доступ к приложению, то объект User.Identity не вернёт никакого имени пользователя, а его свойство IsAuthenticated будет иметь значение False. В этом нет ничего удивительного, т. к. если в системе аутентификации Windows разрешён анонимный доступ, то пользователь работает анонимно, то есть не проходит аутентификацию.

ПРИМЕЧАНИЕ

Чтобы разрешить анонимный доступ, найдите в IIS ваше приложение и откройте его окно свойств, перейдите во вкладку Безопасность каталога и в рамке, содержащей настройки анонимного доступа, нажмите Изменить . В появившемся окне активизируйте переключатель Анонимный доступ .

В это же время у объекта WindowsIdentity свойство IsAuthenticated будет иметь значение True, а в качестве имени пользователя будет стоять строка следующего формата: IUSR_ , как показано в таблице 2.

Таблица 2. Заимствование полномочий и анонимный доступ разрешены

IsAuthenticated False
Authentication type
Name
IsAuthenticated True
Authentication type NTLM
Name BIGDRAGON\IUSR_BIGDRAGON

Свойство name объекта WindowsIdentity имеет такое значение потому, что оно возвращает идентификатор пользователя, под которым работает процесс ASP.NET, а не пользователь Web-узла. А поскольку процесс не может работать анонимно, то он получает имя от IIS, если его невозможно получить от текущего пользователя.

Если вы были внимательны при выполнении операций по разрешению/запрету анонимного доступа, то могли заметить, что в поле Имя пользователя была как раз подставлена строка вышеуказанного формата: IUSR_ (рис. 4).

Рисунок 4. В поле Имя пользователя содержится строка, определяющая имя процесса ASP.NET при анонимном доступе

Кроме того, в среде ASP.NET предусмотрена возможность указания, от кого именно заимствовать полномочия. С этой целью в тэге предусмотрен атрибут userName, в котором и указывается имя пользователя, у которого необходимо заимствовать полномочия.

ПРИМЕЧАНИЕ

В атрибуте userName имя пользователя указывается вместе с именем домена

В следующем фрагменте из файла Web.config, показано, как это должно выглядеть на практике:

После запуска тестового приложения с такой конфигурацией на выполнение, состояние объекта User.Identity останется неизменным, а вот в свойстве name объекта WindowsIdentity вместо строки формата IUSR_ появится имя, указанное в атрибуте userName тэга из файла конфигурации проекта, как показано в таблице 3.

Таблица 3. Процесс ASP.NET работает от имени конкретного пользователя

IsAuthenticated False
Authentication type
Name
IsAuthenticated True
Authentication type NTLM
Name BIGDRAGON\AlBa

Если вы отмените анонимный доступ, то объект User.Identity будет содержать идентификатор зарегистрированного пользователя, а в объекте WindowsIdentity по-прежнему будет оставаться имя пользователя, переданное через атрибут userName.

На этом закончим изучение авторизации как средства безовасности среды ASP.NET. Дальнейшее изучение механизма авторизации требует изучения средств авторизации Windows. Среди них можно выделить списки контроля доступа на низком и высоком уровне, контроль доступа архитектуры клиент/сервер, ролевая безопасность Windows и так далее.

Если эта тема вас действительно заинтересовала, то вы можете найти массу материала в библиотеке MSDN:

  • Темы безопасности в рамках ASP.NET доступны в следующей ветке библиотеки MSDN: .NET Development/.NET Security;
  • По вопросам безопасности всей системы в целом следует обращаться к разделу Security/Security (General)/SDK Documentation.


Если у вас нет MSDN-библиотеки, то к её самому свежему изданию можно обратиться через интернет по адресу: http://msdn.microsoft.com/library/.

В третьей, заключительной части данной статьи, мы рассмотрим очень актуальную и интересную тему — криптографию. Кроме теории и алгоритмов криптографии мы рассмотрим с различных сторон средства шифрования, предоставляемые платформой .NET Framework, и создадим простенький метод шифрования.

. Часть 2

Введение

В первой статье серии « » (« . Часть 1. Построение интерфейса к базе данных», КомпьютерПресс № 9 за 2000 год) мы ознакомились с ASP, а также с принципами построения с его помощью простейшего интерфейса к базе данных (газетный сайт со встроенными возможностями его пополнения новыми статьями, снабжаемыми фотографиями непосредственно с самого сайта и без программирования). Теперь я предложу читателям обогатить этот интерфейс возможностями загрузки (upload) HTML-статьи и иллюстрации к ней непосредственно с сайта (то есть с HTML-формы), ведения автоматической статистики посещений, организации показа баннеров, а также методами использования и азами разработки Активных Серверных Компонентов (Active Server Components) для ASP. Статья будет весьма полезна начинающим Web-программистам, профессионалам же достаточно беглого взгляда, чтобы понять принципы и вникнуть в детали работы активных серверных страниц – ASP.

Что же такое Active X? (Небольшое «лирическое» отступление)

Итак, что же такое COM (Component Object Model) и ActiveX? Чтобы ответить на этот вопрос, зададимся сначала другим: каким образом одна часть программного обеспечения должна получать доступ к сервисам, предоставляемым другой частью? Сегодня ответ на этот вопрос зависит от того, что представляют собой эти части. Например, приложения, скомпонованные с библиотекой, могут пользоваться ее сервисами, вызывая функции из этой библиотеки. Приложение может также использовать сервисы другого – являющегося совершенно отдельным процессом. В данном случае два локальных процесса взаимодействуют посредством некоего механизма связи, который обычно требует определения протокола между этими приложениями (набор сообщений, позволяющий одному приложению выдавать запросы, а другому соответствующим образом отвечать на них). Еще пример: приложение, использующее сервисы операционной системы. Здесь приложение обычно выполняет системные вызовы, обрабатываемые операционной системой. Наконец, приложению могут понадобиться сервисы, предоставляемые программным обеспечением, выполняемым на другой машине, доступ к которой осуществляется по сети. Получить доступ к таким сервисам можно множеством способов, таких как обмен сообщениями с удаленным приложением или вызовы удаленных процедур.

В принципе, проблема одна: первая часть программного обеспечения должна получить доступ к сервисам, предоставляемым второй частью. Но в каждом отдельном случае механизм доступа разный: вызовы локальных функций, передача сообщения средствами связи между процессами, системные вызовы (которые с точки зрения программиста выглядят практически так же, как и вызовы функций) или одна из разновидностей сетевых коммуникаций.

Каждый такой объект поддерживает один или несколько интерфейсов, состоящих из методов. Метод – это функция или процедура, которая выполняет некоторое действие и может быть вызвана программным обеспечением, использующим данный объект (клиентом объекта). Методы, составляющие каждый из интерфейсов, обычно определенным образом взаимосвязаны. Клиенты могут получить доступ к сервисам объекта COM только через вызовы методов интерфейсов объекта – у них нет непосредственного доступа к данным объекта.

А зачем, собственно, применять Active X-технологию в ASP?

Применение встраиваемых в ASP ActiveX-компонентов значительно облегчает задачу создания сайтов. Посудите сами: ведь создание громоздких функций, выполняющих сложные вычисления, да и простых подпрограмм гораздо удобнее с помощью известных всем языков программирования, таких как Visual Basic, Delphi или C++, а сгенерированный код (.dll или .ocx) будет работать во много раз быстрее, ведь скомпилированный код модуля выполняется почти мгновенно, в то время как препроцессор ASP формирует HTML-страницу для каждого клиента гораздо дольше. Реализация этих функций средствами самого ASP во многих случаях будет нетривиальна, а в некоторых — попросту невозможна. Кроме того, многие полезные компоненты доступны со стороны так называемых третьих фирм (third-party components), которые зачастую распространяются бесплатно (или почти бесплатно).

Итак, я надеюсь, что эта статья поможет вам научиться применять «чужие» компоненты (third-party components) и разрабатывать свои.

С чего начать?

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

Что для этого понадобится?

Для реализации вышеизложенной задачи необходим персональный компьютер с Microsoft Windows NT или Windows 2000 (можно и Workstation или Server), установленный IIS (Internet Information Server), какой-нибудь HTML-редактор (советую использовать Macromedia Dreamweaver), Microsoft Access (версии 95, 97 или 2000) и самый обычный текстовый редактор.

Создание и подготовка базы данных

Для начала нашего первого эксперимента создадим базу данных статей, а для этого:

  • запустим приложение Microsoft Access;
  • любым из известных способов создадим новую базу данных (назовем ее «Articles»);
  • в созданной базе данных создадим таблицу с именем, например, «Articles»;
  • пользуясь инструментом «Конструктор», определим поля нашей таблицы и типы принимаемых ими значений:
  • заполним таблицу несколькими статьями в соответствии с созданными полями;
  • сохраним базу данных в файле «ArticlesDB.mdb»

Далее необходимо прописать нашу базу данных в соответствующем разделе источников данных систем. Для этого:

  • запустим программу-конфигуратор источников данных (Data Sources ODBC) – Start->Settings->Control Panel->Administrative Tools->Data Sources ODBC;
  • перейдем во вкладку «System DSN» и создадим новый источник данных, нажав на «Add…»;
  • в появившемся списке драйверов выберем драйвер баз данных Microsoft Access – «Microsoft Access Driver (*.mdb)» и нажмем на «Finish»;
  • в строке «Data Source Name» зададим имя нашей базы данных, например «Articles» (это то имя, по которому мы в дальнейшем будем обращаться к ней);
  • нажмем на «Select…», выберем подготовленный нами файл «ArticlesDB.mdb» и нажмем «OK».

Появляется строка в списке источников данных в вашей системе:

Применение ActiveX в ASP

Мировая компьютерная сеть «кишит» и платными, и бесплатными ActiveX-компонентами. Последний параграф настоящей статьи – попытка перечислить наиболее популярные. Для загрузки файла с HTML-формы советую использовать компонент AspUpload 2.0 Copyright (c) 1998-2000 Persist Software, Inc. (http://www.persits.com).

Формируем главную страницу (index.asp)

Следует обратить особое внимание на формирование переменной «Link». В первом случае, когда значение поля «Article» не равно «No Text», ссылка на статью формируется из файла шаблона ArtTempl.asp, которому идентификатор текущей статьи передается в качестве параметра

(дальнейшая обработка в теле файла шаблона подробно обсуждалась в первой части настоящей статьи).

В противном случае ссылка на статью формируется из имени файла (которое содержится в переменной TextFile) с ее HTML-версией, который уже подгружен на сервер и располагается в каталоге «Articles».

Загружаем файл с HTML-формы

Форма загрузки (UploadForm.asp)

Для начала необходимо создать соответствующую форму. Предполагается, что читатель знаком с азами построения форм (для этих целей советую воспользоваться Macromedia Dreamweaverом), тем не менее я обращу внимание на пару тэгов формы загрузки файлов (полная версия формы загрузки прилагается к данной статье).

Хочется обратить особое внимание на обработку «радиокнопки», определяющей тип статьи («горячая» — «не горячая») и флажок показа иллюстрации на главной странице. Если читатель знаком с первой статьей, то он, вероятно, вспомнит, что в целях обучения вся обработка формы (проверка корректности ввода полей и первоначальная обработка введенных значений) велась на ASP. Приведенный ниже пример иллюстрирует то, как это на самом деле следует делать с помощью какого-либо языка описания сценариев (в нашем случае JavaScript).

В нашем случае мы будем определять состояние флажка показа иллюстрации с помощью небольшого скрипта на JavaScript и «спрятанного» (hidden) поля. Последнее будет принимать значение, соответствующее состоянию флажка.

Как видно, значение поля «details» будет равно 1, если флажок поля «DI» был установлен, и 2 — в противном случае. Вызов самого скрипта удобнее всего выполнять по событию «onsubmit», которое обрабатывается по нажатию на кнопку «Submit», и вплоть до передачи управления скрипту-реакции. Таким образом, на этапе ввода можно осуществлять инициализацию внутренних полей и переменных формы, причем непосредственно на стороне клиента (как известно, языки описания скриптов JavaScript и VBScript именно для этого и предназначены). В нашем случае фрагмент формы будет выглядеть следующим образом:

Соответственно радиокнопка «IsTopNewSelector» будет возвращать значение «0» для обычной и значение «1» для «горячей» статьи.

Обработка формы загрузки с помощью ActiveX-компонента Upload2DBS.asp

Работать с ActiveX-компонентами в ASP достаточно просто. Например, загрузка файлов при помощи компонента «ASPUpload» производится всего двумя строчками кода:

Фактически после отработки этих двух строк все файлы, которые были указаны в полях формы, загружаются на сервер — в данном случае в каталог "c:\InetPub\wwwroot\Articles".

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

Аналогичные действия должны быть выполнены и с файлом HTML (если таковой был указан)

Загрузка файлов с помощью ASP и VBScript

Неужели нельзя обойтись без ActiveX-компонента? Конечно, можно. Давайте рассмотрим, каким образом можно загрузить на сервер, например, файл с иллюстрацией без использования встраиваемого компонента. Попробуем обойтись исключительно средствами ASP. Разумеется, время выполнения операции существенно увеличится, однако в нашем случае (при загрузке всего одного или двух файлов) это будет почти не ощутимо.

Проблема заключается в том, что, как правило, компоненты, предоставляемые «третьими» фирмами, не являются частью самого ASP, а представляют собой так называемые черные ящики, настроить которые под конкретные нужды невозможно. Будучи «третьими» компонентами, они должны устанавливаться на серверы, а это, в свою очередь, означает, что понадобится скопировать файлы компонентов (DLL или OCX) на сервер и зарегистрировать их. Какие проблемы? Никаких, если вы сами осуществляете хостинг вашего сайта. Однако если этим занимается какая-нибудь другая компания, то могут возникнуть проблемы с размещением и (или) регистрацией компонентов на сервере, обслуживающем ваш сайт.

Для того чтобы понять, как работает upload-скрипт, для начала посмотрим, каким образом посылаются данные из окна нашего браузера серверу с помощью протокола HTTP, то есть поймем, как работает «multipart/form-data».

Форма загрузки

Давайте разберемся в механизмах обработки HTML-форм более подробно. Итак, атрибут формы enctype определяет тип содержимого, используемый для кодирования множества элементов (полей) формы с целью их последующей отправки на сервер. Атрибут enctype, используемый по умолчанию, равен «application/x-www-form-urlencoded». Для передачи больших объемов данных, таких как файлы и (или) двоичные данные, используется значение атрибута «multipart/form-data».

Сообщение типа «multipart/form-data» содержит последовательности, каждая из которых представлена блоками, каждый из которых, в свою очередь, содержит следующие обязательные поля:

  • заголовок content-disposition, значение которого равно «form-data», — определяет тип пришедших на сервер данных;
  • имя атрибута — определяет имя элемента формы.

Для файлов этот набор выглядит несколько иначе:

  • заголовок content-type посылаемых двоичных данных;
  • атрибут с именем файла и полным путем к нему на компьютере клиента.

Рассмотрим простой пример HTML:

По нажатии кнопки «SubmitQuery» в этом окошке на сервер придет следующий запрос:

Эти данные могут быть отображены, если их послать клиенту в качестве ответа на запрос. Двоичные данные должны считываться с помощью ASP-функции Request.binaryRead, а записываться с помощью Response.binaryWrite:

Как вы наверняка заметили, блоки последовательности в ответе разделяются между собой следующими разграничителями:

Для каждого блока (поля, элемента формы) имеется одно значение content-disposition. Атрибут name указывает, к какому именно элементу формы относится тот или иной блок (в нашем случае e-mail, blob или Enter). Для элемента формы файла (в нашем случае blob) имя файла также является частью заголовка content-disposition, а заголовок content-type определяет тип данных.

Скрипт-загрузчик

Очевидно, что все содержимое HTTP-запроса должно быть «разобрано» по частям, рассмотрено и обработано нашим скриптом. В таких языках, как VB или C++, это весьма тривиальная задача, так как для этого предусмотрено множество объектов и методов. Применяя VBScript, сделать это не так просто, но все же возможно.

Поскольку посылаемые данные представлены в двоичном формате, мы будем вынуждены пользоваться для работы с ними соответствующими функциями языка VBScript. Логично предположить, что эти данные представляют собой последовательности байтов и такие функции, как MidB, InstrB и LenB, — именно то, что нам нужно. Мы также должны избегать использования классических строк в VBScript потому, что они представляются в формате Unicode и не подходят для передачи одиночных байтов. Это единственные функции VBScript, предназначенные для операций с байтами. Нам же нужен метод, позволяющий получать unicode-строку из «разбираемых» данных, с тем чтобы в дальнейшем использовать ее в VBScript-коде. И еще нам потребуется функция — преобразователь Unicode-строки в байт-строку, с тем чтобы использовать эту строку в качестве аргумента функции InstrB.

Определим объект «UploadRequest». Он содержит все поля нашей формы и выглядит следующим образом:

Такой «объектный» подход к организации позволит в дальнейшем упростить доступ к обрабатываемым данным.

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

Проблема в том, что, как было уже отмечено, функция InstrB требует строки байтов, в то время как мы располагаем Unicode-строками. Функция getByteString (String) позволит нам преобразовать unicode-строку в строку байтов. Теперь в цикле найдем конец последовательности:

Для каждого шага в цикле мы будем обрабатывать одно поле. Все данные, относящиеся к этому полю, будем сохранять в объекте типа Dictionary, и, таким образом, для каждого элемента формы будет порождаться новый объект UploadControl.

Сначала мы получим имя поля из заголовка «content-disposition». В конце имени располагается символ chr(34). Этим мы и будем руководствоваться для определения конца.

Далее необходимо проверить, является поле элементом типа «файл» или элементом типа «текст». Если это элемент типа «текст», никаких данных, кроме имени поля, нам не потребуется, а если это элемент типа «файл», то нам понадобятся имя файла и заголовок content-type.

Если это файл, то добавим имя и путь к файлу в объект dictionary. Имя файла есть строка символов, которую необходимо преобразовать в формат unicode. Сделать это можно при помощи функции getString().

А вот теперь можно получить содержимое файла, которое нет необходимости преобразовывать, поскольку это двоичные данные. Попросту необходимо сохранить в файловой системе на сервере или разместить в базе данных как объект типа blob (binary long object).

Если же это не тип «текст», необходимо преобразовать содержимое в строку Unicode для дальнейшего использования в VBScript.

Содержимое также добавляется к объекту dictionary.

В конце концов объект dictionary должен быть добавлен к глобальному объекту dictionary всей формы.

Функция преобразования однобайтовых строк в двухбайтовые (формата Unicode).

Функция преобразования строки в строку байтов (используется для форматирования аргументов для функции InstrB).

Вызов скрипта загрузки

Извлечение данных формы

Загруженные таким образом данные можно, к примеру, переслать обратно клиенту:

Двоичные данные можно таким же образом переслать обратно клиенту. Для этого можно использовать метод BinaryWrite:

Однако, как правило, в случае если объект представляет собой файл, необходимо записать данные на жесткий диск в виде файла или записи в базе данных. С этой целью мы воспользуемся объектом FileSystem.

Каталог, в котором мы собираемся сохранить наш файл, может быть указан несколькими способами: абсолютным, а также относительно каталога, зарегистрированного на сервере в качестве корневого каталога Web-сайта (для IIS это каталог C:\InetPub\wwwroot\ по умолчанию). Получить этот «виртуальный» каталог можно при помощи серверной переменной «PATH_INFO».

Метод «Write», с помощью которого и будет осуществляться запись в файл, требует ввода unicode-строки в качестве аргумента, и нам потребуется преобразовать массив байтов в unicode-строку. Метод Write преобразовывает эту Unicode-строку и записывает ее в формате ASCII. Таким образом и формируется файл, содержащий двоичный образ нашей входной строки байтов:

Таким образом, окончательная версия обработчика нашей формы в случае применения только ASP и VBScript-функций (файл Upload2DBE.asp) для загрузки файла будет выглядеть следующим образом:

А теперь давайте попробуем сами разработать ActiveX-компонент…

Согласитесь, что было бы неплохо самим научиться создавать ActiveX-компоненты для ASP. Тем, кто активно программирует, освоить это будет очень несложно, тем более что для этого подходят почти все современные средства разработки. Мы будем рассматривать способы создания ActiveX-компонентов для ASP как на Microsoft Visual Basic 6.0 – для неискушенных в области классического программирования, так и в Microsoft Visual C++ 6.0 – для тех, кто знаком с языком программирования C++ и кому он ближе и понятнее.

…с помощью Microsoft Visual Basic 6.0

Для начала попробуем создать активный серверный компонент для загрузки файла на сервер с помощью Microsoft Visual Basic 6.0. Для простоты рассматрим простейший пример HTML-формы загрузки файла (файл OCUpload.htm).

Данная форма предназначена для загрузки на сервер единственного файла. Определим также скрипт-реакцию на эту форму: ACTION=»UploadReceive.asp»

Соответственно вызов активного серверного компонента из ASP-скрипта (файл UploadReceive.asp) будет выглядеть следующим образом:

Функцией компонента, который мы собираемся создавать, будут являться разбор HTTP-заголовка получения для имени файла и сохранение файла на сервере в определенном каталоге. Для этого выполним следующую последовательность операций:

  1. Запустим Microsoft Visual Basic 6.0;
  2. В появившемся диалоговом окне выберем «ActiveX DLL»;
  3. Нажмем на «Open»;
  4. В окне инспектора проекта, выделив имя проекта, нажмем правую кнопку мыши и выберем пункт «Project1 Properties»;
  5. Поменяем имя проекта на «UploadProject» и нажмем на «ОК»;
  6. Выбрав класс «Class1», в окошке пониже перепечатаем имя класса с «Class1» на «UploadClass»;
  7. После открытия проекта войдем в пункт меню Project -> References;
  8. Установим флажок напротив пункта «Microsoft Active Server Pages Object Library»;
  9. Нажмем на «OK»;
  10. В окне кода класса впечатать функцию «DoUpload».

Как и у любого компонента, используемого в ASP, необходимо определить контекстные объекты скрипта, которые мы собираемся использовать в нашем проекте. Мы «перехватим» объекты в функции «OnStartPage». А поскольку нам понадобится лишь ASP-метод «Request», то это единственный контекстный объект, который мы сделаем доступным. Так выглядит код определения контекста процедуры загрузки, которую мы будем создавать:

Таким образом, мы можем использовать объектную переменную «MyRequest» точно так же, как если бы мы использовали любой Request-объект в ASP-файле. В нашем случае мы применяем ASP-файл (UploadReceive.asp) для управления ActiveX-компонентом. Для того чтобы использовать любой ASP-объект и его свойства в коде, мы должны передавать ASP-объект нашему компоненту вышеприведенным фрагментом кода. Мы будем использовать лишь два Request-метода ASP: «TotalBytes» и «BinaryRead».

Однако следует учитывать одно важное ограничение. Так как мы будем считывать данные (содержимое) файла при помощи функции «BinaryRead», то не следует забывать, что в этом случае использовать метод «Request.Form» нельзя. Иначе говоря, мы можем получить данные о нашем файле исключительно с помощью функции «BinaryRead». Однако, как будет показано ниже, это не создаст видимых трудностей при считывании имени или других атрибутов.

Как уже отмечалось выше, заголовок HTTP, посылаемый «multipart/form-data»-формой, включает в себя блоки, содержащие данные элементов формы. Мы будем извлекать первую часть заголовка HTTP (первый его блок), так как в нашем случае поле типа «файл» расположено в форме первым. Далее мы считаем его в строку, откуда извлечем имя файла, используя для этого VB-функцию «InStr» и цикл. Извлечь содержимое файла (сами данные) гораздо проще.

Теперь подошло время создания главной процедуры загрузки файла – «DoUpload». Объявим публичную функцию:

Public Sub DoUpload()

Прежде всего нам предстоит определить количество посланных клиентом байтов. А поскольку переменная «TotalBytes» есть константа, то мы присвоим ее значение объявленной нами переменной «varByteCount».

Теперь можно заняться и «сбором» данных, считывать которые посредством вызова функции «BinaryRead» мы будем в массив типа «Byte», а извлеченные данные помещать в массив «binArray». Размерности массива «binArray» мы переопределим в соответствии с размерностью наших данных следующим образом:

Итак, нам удалось вычленить данные из HTTP-заголовка. Теперь попробуем извлечь из полученных данных имя посланного нам клиентом файла. Для этого необходимо «разобрать» полученную строку байтов стандартными функциями операций со строками.

Заголовок HTTP располагается в самом начале нашего массива байтов. Цикл «Do Until» просматривает этот массив до тех пор, пока не обнаружит два последовательно идущих символа перевода строки, которые и обозначают конец блока параметров и одновременно начало данных файла. Каждый повтор цикла добавляет к строке «strHeadData» один байт. По окончании цикла мы получим пару <имя_элемента, значение_элемента>в отдельной строке «strHeadData». Эта пара может выглядеть следующим образом:

Сам процесс «извлечения» имени файла реализуем в несколько шагов следующим образом:

Найдя в ней значение «filename=», увеличим значение указателя на 10, таким образом переместившись в необходимую нам позицию. Сейчас мы находимся на позиции начала имени файла в строке.

Для того чтобы найти символ конца имени файла в строке, поищем первый символ «CR LF» с помощью функции «intFileTagStart»:

Совсем неплохо было бы выяснить, ввел ли пользователь значение. Конечно, это следовало сделать гораздо раньше, и не в ActiveX-модуле, а средствами VBScript, или JavaScript непосредственно в модуле формы (как это было показано ранее), или, на худой конец, с помощью самого ASP, но все-таки настоятельно рекомендую писать код активных серверных компонентов таким образом, чтобы обеспечить независимость от тех, кто в дальнейшем будет их использовать, то есть обеспечить универсальность и защиту «от дурака»:

Далее нам понадобится извлечь имя файла из полного его пути, с тем чтобы сохранить файл в файловой системе на сервере под оригинальным именем.

Переместимся на следующий разделитель (то есть на конец текущего блока)

и сохраним данные в файле в корневом (или любом другом) каталоге на жестком диске «C:».

Полный файл-архив проекта с рассмотренным примером можно найти на нашем CD-ROM.

… с помощью Microsoft Visual C++ 6.0

А зачем, собственно, нужен C++? Ведь, в конце концов, Visual Basic намного проще, и процесс создания COM-компонентов с его помощью занимает гораздо меньше времени. Занимаясь разработкой чего бы-то ни было на C++, мы увеличиваем как стоимость, так и время разработки. К сожалению, это мнение в последнее время высказывается все чаще. Однако не следует забывать, что, несмотря на все эти казалось бы резонные доводы, среди всевозможных языков программирования и описания сценариев (VB, Java, ASP и так далее) C++ остается чемпионом по скорости выполнения и эффективности кода. И хотя выигрыш этот кажется невеликим при сравнении компонента для одного клиента, в реальной Web-обстановке, когда клиентов сотни, а порой даже тысячи и сотни тысяч и вычислительная нагрузка на серверы растет в геометрической прогрессии, этот выигрыш колоссален. Пара строк ASP-кода, обрабатывающая длинные строки символов, выглядит великолепно на сервере с небольшим числом клиентов, но может «поставить на колени» сервер с множеством клиентов.


Отсюда мораль: самые «узкие» места целесообразно разрабатывать на каком-нибудь языке программирования вроде C++, а ASP использовать в качестве «клея» между быстро работающими ActiveX-компонентами, созданными с его помощью. Но хватит слов, давайте перейдем к делу. Для того чтобы посвятить читателя в азы разработки ActiveX-компонента и его применения в нашем газетном сайте, предусмотрим следующую функцию.

Пусть у пользователя будет возможность просматривать содержимое каталога «C:\InetPub\wwwroot\Articles», то есть список всех файлов этой папки на сервере, причем с возможностью просмотра каждого файла в отдельности. Первое, что приходит в голову в этом случае, это страница, формируемая с помощью ActiveX-компонента, возвращающего список файлов заданного каталога. Сформируем этот компонент прямо сейчас, используя Microsoft Visual C++ 6.0.

Итак, надеюсь, вы уже запустили MSVC. Для начала создайте новый проект, в появившемся диалоговом окне укажите его тип («ATL Com AppWizard») и задайте имя. Назовем его «Dir» — в честь популярной команды MS-DOS.

Далее необходимо уточнить формат разрабатываемого компонента, а именно динамически подключаемой библиотеки в следующем диалоговом окне.

Как вы, наверное, заметили, во втором диалоге MSVC предупреждает о том, что мастер создает лишь ATL-проект и что по завершении его работы понадобится вручную создавать COM-объект в его составе. А сделать это можно следующим образом.

После выбора в появившемся меню строки «New ATL Object…» появится диалоговое окно, в котором необходимо будет уточнить тип создаваемого ActiveX-объекта, а именно активный серверный компонент («ActiveX Server Component»).

Теперь необходимо определить имена создаваемого класса и исходных файлов. Пусть наш класс называется «FilesList». Если вы введете это имя в соответствующем поле следующего диалога, то увидите следующее окно.

Следует уделить внимание двум другим вкладкам этого диалога: «Attributes» и «ASP». Перейдя во вкладку «Attributes», можно, в частности, определить поточную модель разрабатываемого COM-компонента. Вкладка «ASP» позволяет определить, какие объекты самого ASP будут доступны из разрабатываемого компонента, то есть указатели, на какие объекты ASP будут создаваться в реализации (implementation) самого компонента.

Следует также заметить, что конструирование указателей на внутренние (Intrinsic) объекты ASP производится в конструкторе компонента OnStartPage (не путать с одноименной функцией файла Global.asa), деструктурирование — в деструкторе OnEndPage, без применения которых доступ к внутренним объектам ASP будет закрыт, поэтому галочка в поле OnStartPage/OnEndPage должна быть выставлена. Реально в разрабатываемом компоненте нам необходим лишь объект ASP «Response», однако в целях обучения выделим все объекты. После всех проделанных операций рекомендую сохранить проект.

Как видно, MSVC создал функции OnStartPage и OnEndPage в IfilesList в нашем объекте CfilesList. Посмотрим полученный код:

Далее необходимо добавить функцию, которая и будет выполнять необходимые нам действия. Напишем ее:

Не забудьте прописать заголовок нашей новой функции WriteDir в файле FilesList.h в разделе Active Server Pages Methods public сразу за объявлениями функций OnStartPage и OnEndPage:

Кроме того, мы использовали функции «_findfirst» и «_findnext», а также структуру, которую они заполняют. Все эти компоненты объявлены вo включаемом файле «io.h», поэтому не забудьте включить и его, что удобно сделать в файле «StdAfx.h».

После всех действий нажмите на клавишу F7, и если вы все сделали правильно, то MSVC построит вашу библиотеку и зарегистрирует ее в системе. Самим же это можно сделать, выполнив команду:

Итак, нам осталась самая малость. Написать ASP-скрипт, который, используя функцию «WriteDir», выведет в окне клиента список всех файлов каталога с погруженными статьями и иллюстрациями к ним нашего газетного сайта со ссылками на них (файл Dir.asp):

Страничка — результат выполнения данного скрипта — будет выглядеть следующим образом.

Полный файл-архив проекта с рассмотренным примером находится на нашем CD-ROM.

Еще несколько слов в защиту C++

Компилируемые языки программирования, такие как Visual C++, Borland C++ или Delphi, используют исходный текст для генерации машинного кода (набора машинных команд). В результате формируется набор инструкций, к которым вычислительная машина может обращаться напрямую (отсутствует необходимость в использовании каких бы то ни было препроцессоров, «до-компиляторов» и так далее) и которые поэтому выполняются очень быстро.

Интерпретируемые языки программирования, такие как Visual Basic и J++, в техническом смысле не компилируются. Конечно, в результате компиляции получается выполняемый модуль или библиотека, но это не машинный код. Вместо него, попросту говоря, используется объектный код, который интерпретируется в машинный во время выполнения самой команды, что, безусловно, требует большей вычислительной мощности от процессора.

Кроме «скоростного» фактора нельзя забывать об уникальных возможностях, предоставляемых такими языками, как C++ и Pascal (Delphi). Они, как никакие другие, активно используют объектно-ориентированные концепции в программировании (технологии OOP и OOD), которые позволяют не терять контроль над кодом при разработке больших проектов и осуществлять переносимость целых классов функций. Конечно, с точки зрения новичка все это может показаться сложным и недоступным, но, поверьте, это не так.

Ничего не имея против использования Visual Basic для обучения, разрабатывать COM-объекты, встраиваемые в ASP-страницы, с его помощью я все же не советую.

Заключение

Хотелось бы сориентировать разработчиков ASP-страниц в мире ASP-компонентов. Дело в том, что автор настоящей статьи провел не один день, сидя за Интернетом в поисках всевозможных ASP-компонентов для решения всевозможных задач.

AspUpload 2.0 Copyright – загрузка файлов на сервер в online-режиме — (c) 1998-2000 Persist Software, Inc. (http://www.persits.com).

XUpload 2.0 Copyright – загрузка каталогов на сервер в online-режиме с поддержкой множества интересных функций (drag-and-drop и т.п.) — (c) 1998-2000 Persist Software, Inc. (http://www.persits.com).

Желающим скачать множество полезных активных серверных компонентов для их использования в ASP советую посетить:

Разрешения на доступ к файлам IIS AppPoolIdentity и файловой системы

Здесь возникает проблема с IIS 7.5 и ASP.NET, с которыми я занимаюсь исследованием и получаю нигде. Любая помощь будет принята с благодарностью.

Мой вопрос: используя ASP.NET в IIS 7.5, как IIS и/или операционная система позволяют веб-приложению писать в папку типа C:\dump при полной поддержке? Как мне не нужно явно добавлять доступ для записи для пользователя пула приложений (в данном случае ApplicationPoolIdentity )?

  • В IIS 7.5 идентификатор по умолчанию для пула приложений: ApplicationPoolIdentity .
  • ApplicationPoolIdentity представляет собой учетную запись пользователя Windows под названием «IIS APPPOOL\AppPoolName» , которая создается при создании пула приложений, где AppPoolName является именем пула приложений.
  • Пользователь «IIS APPPOOL\AppPoolName» по умолчанию является членом группы IIS_IUSRS .
  • Если вы работаете под полным доверием, ваше веб-приложение может писать во многие области файловой системы (исключая такие папки, как C:\Users , C:\Windows и т.д.). Например, ваше приложение будет иметь доступ к записи в некоторые папки, например, C:\dump .
  • По умолчанию группе IIS_IUSRS не предоставляется доступ для чтения или записи к C:\dump (по крайней мере, не доступ, который отображается на вкладке «Безопасность» в проводнике Windows).
  • Если вы откажетесь на запись на IIS_IUSRS , вы получите SecurityException при попытке записи в папку (как и ожидалось).

Итак, принимая во внимание все это, каким образом доступ на запись предоставляется пользователю «IIS APPPOOL\AppPoolName» ? Процесс w3wp.exe работает как этот пользователь, поэтому что позволяет этому пользователю писать в папку, у которой, похоже, нет явного доступа?

Обратите внимание, что я понимаю, что это, вероятно, было сделано ради удобства, так как было бы больно предоставить пользователю доступ ко всем папкам, которые нужно написать, если вы работаете под полным доверием. Если вы хотите ограничить этот доступ, вы всегда можете запустить приложение в разделе «Среднее доверие». Мне интересно узнать о том, как операционная система и/или IIS позволяют выполнять эти записи, даже несмотря на то, что доступ к файловой системе явно отсутствует.

ApplicationPoolIdentity назначается членство группы Users , а также группа IIS_IUSRS . На первый взгляд это может выглядеть несколько тревожным, однако группа Users имеет несколько ограниченные права NTFS.

Например, если вы попытаетесь создать папку в папке C:\Windows , вы обнаружите, что не можете. ApplicationPoolIdentity все еще должен быть в состоянии читать файлы из системных папок Windows (иначе как еще рабочий процесс сможет динамически загружать важные DLL).

Что касается ваших замечаний о возможности записи в папку c:\dump . Если вы посмотрите на разрешения в расширенных настройках безопасности, вы увидите следующее:

Смотрите, что специальное разрешение наследуется от c:\ :

То, что ваш сайт ApplicationPoolIdentity может читать и записывать в эту папку. Это право унаследовано от диска c:\ .

В общей среде, где у вас может быть несколько сотен сайтов, каждая из которых имеет свой собственный пул приложений и идентификатор пула приложений, вы сохранили бы папки сайта в папке или томе, у которых была удалена группа Users , и установлены разрешения так что доступ к ним (с наследованием) доступны только администраторам и учетной записи SYSTEM.

Затем вы должны индивидуально назначать требуемые разрешения для каждого IIS AppPool\[name] для этого в корневой папке сайта.

Вы также должны убедиться, что все папки, созданные вами, где хранятся потенциально чувствительные файлы или данные, удалены группой Users . Вы также должны убедиться, что все приложения, которые вы устанавливаете, не хранят конфиденциальные данные в своих папках c:\program files\[app name] и вместо этого они используют папки профиля пользователя.

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

Членство в группе ApplicationPoolIdentity можно проверить с помощью инструмента SysInternals Process Explorer. Найдите рабочий процесс, который запущен с идентификатором пула приложений, который вам интересен (вам нужно добавить столбец User Name в список столбцов для отображения:

Например, у меня есть пул с именем 900300 , который имеет идентификатор пула приложений IIS APPPOOL\900300 . Щелкните правой кнопкой мыши по свойствам процесса и выберите вкладку «Безопасность»:

Как мы видим, IIS APPPOOL\900300 является членом группы Users .

Asp компонент доступа к файлам

В этом разделе описана процедура предоставления компоненту Компонент SQL Server Database Engineдоступа к тому расположению в файловой системе, где хранятся файлы базы данных. Служба компонента Компонент Database Engine должна иметь разрешение файловой системы Windows для доступа к папке, в которой хранятся файлы базы данных. Разрешение на расположение по умолчанию задается во время установки. Если файла базы данных размещаются в другом расположении, то необходимо выполнить эти действия, чтобы предоставить компоненту Компонент Database Engine разрешение полного доступа к этому расположению.

Начиная с версии SQL Server 2012, разрешения назначаются идентификатору безопасности каждой из служб. Эта система позволяет обеспечить изоляцию и всестороннюю защиту службы. Идентификатор безопасности службы создается на основе имени службы и является уникальным для каждой службы. В разделе Настройка учетных записей и разрешений службы Windows описывается идентификатор безопасности каждой службы доступа, а имена перечисляются в разделе Права и привилегии Windows. Разрешение на доступ к расположению файла назначается именно идентификатору безопасности службы.

С помощью проводника Windows перейдите в папку файловой системы, в которой находятся файлы базы данных. Правой кнопкой мыши щелкните эту папку и выберите пункт Свойства.

На вкладке Безопасность щелкните Изменитьи затем ― Добавить.

В диалоговом окне Выбор пользователей, компьютеров, учетных записей служб или групп щелкните Расположения, в начале списка расположений выберите имя своего компьютера и нажмите кнопку ОК.

В поле Введите имена объектов для выбора введите имя идентификатора безопасности службы, указанное в разделе Настройка учетных записей службы и разрешений Windows электронной документации. (В качестве идентификатора безопасности службы компонента Компонент Database Engine используйте NT SERVICE\MSSQLSERVER для экземпляра по умолчанию или NT SERVICE\MSSQL$InstanceName — для именованного экземпляра.)

Щелкните Проверить имена , чтобы проверить введенные данные. Проверка зачастую выявляет ошибки, по ее окончании может появиться сообщение о том, что имя не найдено. При нажатии кнопки ОКоткрывается диалоговое окно Обнаружено несколько имен . Теперь выберите идентификатор безопасности службы MSSQLSERVER или NT SERVICE\MSSQL$InstanceName и нажмите кнопку ОК. Снова нажмите кнопку ОК, чтобы вернуться в диалоговое окно Разрешения.

В поле имен Группа или пользователь выберите имя идентификатора безопасности службы, а затем в поле Разрешения для установите флажок Разрешить для параметра Полный доступ.

Нажмите кнопку Применить, а затем дважды кнопку ОК , чтобы выполнить выход.

Библиотека Интернет Индустрии I2R.ru

Малобюджетные сайты.

Продвижение веб-сайта.

Контент и авторское право.

Компоненты ASP. Службы COM+ в ASP-компонентах и ASP-приложениях

Создавать и успешно использовать ASP-компоненты можно и без прямого обращения к каким-либо службам COM+. Однако именно эти службы могут внести ту «изюминку», которая превратит просто удовлетворительно работающее ASP-приложение в хорошо масштабируемое и соответствующее предъявляемым ему требованиям, независимо от того, каковы эти требования.

Службы COM+, к которым, прежде всего, стоит обратиться в разработке ASP-компонентов, — это управление транзакциями (transaction management), активация по требованию (just-in-time activation, JIT) и резервирование (pooling). Кроме того, можно использовать новые интерфейсы, которые были созданы для поддержания большей части возможностей этих служб. Однако перед рассмотрением всех этих новшеств обратимся к применению компонентов в приложениях.

Разработка систем на основе компонентов

Именно система, построенная на основе компонентов, выделяет индивидуальные процессы в многократно используемые порции кода и данных, а затем использует один или несколько этих компонентов для сознания полноценных приложений. Среди нескольких типов приложений различают клиент-серверную (client/server), распределенную (distributed) и многоярусную (n-tier) системы. В клиент-серверной системе (client-server system) процессы распределяются между клиентом и сервером, причем клиент отвечает за все взаимодействия с пользователем, отображение данных и подтверждение полномочий клиента, а сервер обрабатывает большую часть обращений к базам данных, проверяет полномочия сервера и контролирует бизнес-правила. В распределенной системе (distributed system) компоненты приложений могут располагаться на разных машинах и географически находиться в разных местах. Кроме того, для обработки множественных запросов может быть создано несколько экземпляров одного и того же компонента, таким образом, появляется возможность предоставлять одну и ту же услугу сразу множеству клиентов. И наконец, многослойная система (n-tier system) объединяет в себе элементы как клиент-серверной, так и распределенной систем. Здесь, как и в клиент-серверной системе, присутствует иерархия компонентов, однако сами по себе компоненты могут дублироваться для распределения загрузки процессов, а также распределяться на большом количестве машин и мест, как это происходит в распределенной системе. Стандартная n-ярусная система может состоять из клиента, выполняющего все взаимодействия с пользователем, проверку полномочий клиента и отображение данных; бизнес-уровня, контролирующего бизнес-правила, общие вопросы управления транзакциями и проверку полномочий, и уровня данных, обрабатывающего все прямые обращения к данным.

Достоинства применения компонентов в распределенных системах, прежде всего, состоят в том, что компоненты получаются небольшими, компактными и переносимыми (поскольку хост предоставляет компоненту потребную для него среду). Если запрос, поступивший на север, начинает снижать общую производительность машины, компонент или группа компонентов с легкостью переносятся на другой сервер без какого-либо изменения кода компонента. Вдобавок, поскольку компоненты разбиты на модули, один или несколько модулей могут перемещаться на другие серверы, до достижения баланса нагрузки на процессоры всех серверов. Приложения, создаваемые без разбиения на модули, не могут быть разделены на части, а, тем более, не могут быть разнесены по разным машинам.

Другим преимуществом компонентов является тот факт, что гораздо больше родовых функций (generic functions) может быть разделено на отдельные компоненты и, таким образом, использовано во всей системе. Кроме того, применение компонентов упрощает модель и конструкцию n-ярусной системы. В качестве примера можно привести систему, в которой интерфейсный компонент проверяет достоверность адресной информации. Проверка достоверности достаточно характерна: она просто подтверждает тот факт, что все необходимые поля, такие как «Город» или «Почтовый индекс», заполнены. Тогда бизнес-уровень сможет обрабатывать для приложения адресную информацию, исходя из типа бизнеса. На основе адресной информации бизнес-уровень может вести поиск, например, зон отгрузки для компонента с помощью соответствующего приложения или зон доставки для виртуальной системы заказов. Компонент может обратиться к уровню данных для сохранения адресной информации, извлечения дополнительной информации или даже для запуска других виртуальных бизнес-компонентов, выполняющих какую-либо еще обработку информации. Уровень данных сам по себе может быть разделен по отдельным машинам, отдельным базам данных или даже различным типам хранилищ данных, вместе с некоторой информацией, идущей на долговременное или кратковременное хранение (если информация может потребоваться лишь в некоторой специфической задаче, а затем должна быть удалена).

Вне зависимости от того, как компоненты выполняют поставленную задачу, основная идея состоит в том, чтобы отделить как можно больше родовых функций (таких как обращение к адресной информации и проверка ее достоверности), необходимых для многих приложений, от большинства специфичных для бизнеса функций, таких как поиск виртуальных магазинов для приложений, позволяющих делать покупки в Интернете. Кроме того, n-ярусное приложение следит за отделением компонентов пользовательского интерфейса, в обязанности которых входит обеспечение успешного получения нужной информации, от бизнес-уровня, сравнивающего полученную информацию с уже имеющейся для обеспечения бизнес-функций. Бизнес-уровень отделен от уровня данных, заботящегося о наличии достаточного количества информации для успешного совершения транзакций данных и совершенно не думающего том, каким образом была получена информация, или о хотя бы о ее назначении.

ASP-компоненты принимают активное участие в этом типе систем, обеспечивая работу бизнес-уровня или уровня данных. Интерфейс пользователя при этом поддерживается браузером, обращающимся к ASP-приложению.

В Windows 2000 работа с компонентами существенно облегчается службами COM+, выполняющими для компонентов такие действия, как например резервирование и транзакции. Именно для реализации этих задач традиционные интерфейсы COM были дополнены совершенно новыми интерфейсами, о которых вы узнаете в следующем разделе.

Интерфейсы COM+

Большинство важнейших интерфейсов COM, таких как, например, IUnknown и IDispatch, с появлением среды COM+ не претерпело каких-либо изменений и по сию пору решает все те же знакомые нам задачи. Главное отличие между COM и COM+ состоит в том, что та функциональность, которая в Windows NT и Windows 98 выполнялась средствами MTS, нынче полностью интегрирована в архитектуру COM+. Такого рода интеграция не только принесла с собой новые возможности, предоставляемые службами COM+, но и позволила существенно улучшить характеристики компонентов.

Разумеется, разработчики COM+ не забыли о необходимости поддержки новых служб COM+, а также нескольких новых интерфейсов уже имеющимися средствами, реализованными в MTS. В следующих нескольких разделах нами будут рассмотрены несколько ключевых интерфейсов, без знания которых, как нам кажется, разработка ASP-компонентов была бы бессмысленна.

Интерфейс IObjectContext

В главе 4 мы обсуждали концепцию контекстов (contexts) как совокупностей объектов, отвечающих одинаковыми требованиями. Среди таких требований может быть, например, возможность резервирования (pooling) для компонентов или их совместное участие в транзакциях.

В Windows 2000 контекст компонентов представляет собой набор свойств времени выполнения (runtime properties), непосредственная работа с которым может вестись с помощью объекта ObjectContext, управляющего контекстной информацией для компонента. Для доступа к свойствам объекта ObjectContext используется интерфейс IObjectContext, доступный, в свою очередь, с помощью библиотеки типов служб COM+.

Ответ на вопрос о том, каким именно образом осуществляется доступ к объекту ObjectContext, зависит от того, каким языком программирования вы пользуетесь. Например, если взять Visual Basic, то здесь сначала производится импорт ссылки на библиотеку типов служб COM+ в рабочий проект, и только потом можно создать ссылку на объект ObjectContext и вызвать для создания экземпляра метод GetObjectContext:

Dim objContext As ObjectContext
Set objContext = GetObjectContext

В Visual С++ под Windows NT для доступа к объекту ObjectContext также можно применить метод GetObjectContext:

CComPtr m_spObjectContext;
hr = GetObjectContext(&m_spObjectContext);

В то же время, в Visual C++ под Windows 2000 для передачи интерфейсу идентификатора GUID уже используется метод CoGetObjectContext:

hr = CoGetObjectContext(IID_IObjectContextInfo,
(void **)&m_spObjectContext);

Независимо от того, применяется ли метод GetObjectContext или метод CoGetObjectContext, результаты будут одними и теми же, поскольку вызов метода CoGetObjectContext в COM+ является оболочкой для вызова метода GetObjectContext. В Visual С++ придется также добавить в путь библиотеки компонента ссылку на заголовочный файл comsvcs.h служб COM+ и ссылку на файл связанного объекта comsvcs.lib.

Получив ссылку на интерфейс IObjectContext, можно вызывать его методы, перечисленные в табл. 1.

табл. 1. Методы интерфейса IObjectContext

Метод Описание
CreateInstance Создает экземпляр объекта
DisableCommit Показывает, что компонент не готов к выполнению транзакции
EnableCommit Показывает, что компонент все еще обрабатывается, но транзакция может быть выполнена
IsCallerInRole Показывает, соответствует ли вызывающий определенной роли (с учетом ролевой безопасности)
IsInTransaction Показывает, участвует ли компонент в транзакции
IsSecurityEnabled Показывает, включена ли защита
SetAbort Показывает, что компонент завершил работу и транзакция прервана
SetComplete Показывает, что компонент завершил работу и транзакция готова к принятию

Интерфейс обладает следующими свойствами:

  • ContextInfo — возвращает ссылку на объект контекстной информации, связанный с компонентом;
  • Count — показывает число именованных свойств объекта;
  • Item — содержит имена свойств;
  • Security — возвращает ссылку на объект Security, связанный с объектом ObjectContext.

Интерфейс информации контекста IObjectContextInfo более подробно будет рассмотрен в следующем разделе. Для обращения к встроенным ASP-объектам применяется коллекция Item. Получить доступ к ней можно непосредственно из Visual Basic:

Dim oc As ObjectContext
Dim app As Application
Set oc = GetObjectConext
Set app = oc.Item(«Application»)

Получить доступ к ASP-объектам можно и через объект ObjectContext:

Set app = oc(«Application»)

Из других программных языков для обращения к объектам ASP придется применить другие технологии. В C++, например, для получения доступа к определенному ASP-объекту нужно послать запрос экземпляру интерфейса IGetContextProperties:

CComPtr pProps; //свойства контекста

//получение ObjectContext
hr = CoGetObjectContext(IID_IObjectContext,
(void **)&m_spObjectContext);
if (FAILED(hr)) return hr;

//получение свойств контекста
hr = m_spObjectContext ->
QueryInterface( IID_IGetContextProperties,
(void**)&pProps );
if (FAILED(hr)) return hr;

получение свойства Response
bstrProp = «Response»;
hr = pProps->GetProperty( bstrProp, &vt ) ;
if (FAILED(hr)) return hr;

p > hr = piDispatch->QueryInterface( IID_IResponse,
(void**)&m_piResponse );

В документации к интерфейсу IGetContextProperties сообщается, что он действует только в среде Windows NT, но и в Windows 2000 с его помощью также можно обращаться к встроенным ASP-объектам.

Интерфейс IObjectContextInfo

Интерфейс IObjectContextInfo служит для получения относящейся к текущему компоненту информации о транзакциях, активности и контексте. С помощью этого интерфейса можно получить доступ к указателю на интерфейс ITransaction. В табл. 2 приведены методы интерфейса IObjectContextInfo.

табл. 2. Методы интерфейса IObjectContextInfo

Метод Описание
GetActivityId Возвращает идентификатор текущей активности
GetContextId Возвращает идентификатор текущего контекста
GetTransaction Возвращает указатель на интерфейс ITransaction
GetTransactionId Возвращает идентификатор текущей транзакции
IsInTransaction Показывает, участвует ли компонент в транзакции

Если в компонентах COM+ осуществляется синхронизация (описываемая позже), метод GetActivityId возвращает идентификатор текущей активности, в противном случае будет возвращено значение Null.

Метод GetTransaction возвращает указатель на интерфейс ITransaction. С помощью этого интерфейса можно принять или прервать транзакцию, хотя реализуются эти функции с помощью объекта ObjectContext или интерфейса IContextState, рассматриваемых далее.

Интерфейс IContextState

Интерфейс IContextState предоставляет возможность более четкого управления транзакциями и активацией, чем это допустимо в интерфейсе IObjectContext. Например, в интерфейсе IObjectContext с помощью метода SetComplete можно отметить компонент, как завершивший работу и ожидающий принятия транзакции, а с помощью метода SetAbort отметить его как завершивший работу и ожидающий прерывания текущей транзакции.

На практике есть два условных бита, устанавливаемых при работе с методами SetComplete и SetAbort. Первый из их — бит завершения (done bit), его установка указывает COM+, что обработка компонента завершена. Второй — бит согласованности (consistency bit). Установка этого бита определяет, может ли быть транзакция принята или она должна быть прервана.

Оба метода, SetComplete и SetAbort, интерфейса IObjectContext одновременно устанавливают оба бита, причем оба устанавливают бит завершения в значение True, указывая, что обработка компонента завершена. В то же время, с помощью интерфейса IContextState можно идентифицировать факт окончания работы компонента отдельно от статуса транзакции.

В табл. 3 приведены четыре метода интерфейса IContextState.

табл. 3. Методы интерфейса IContextState

Метод Описание
GetDeactivateOnReturn Получает состояние бита завершения
GetMyTransactionVote Получает состояние бита согласованности
SetDeactivateOnReturn Сигнализирует о завершении работы компонента
SetMyTransactionVote Идентифицирует возможность принятия либо прерывания транзакции


Бит завершения можно получать и устанавливать с помощью методов SetDeactivateOnReturn и GetDeactivateOnReturn. Компонент деактивируется по завершении методов только при значении бита завершения, установленном в True.

Чтобы убедиться во всех этих возможностях, создайте компонент Visual Basic, реализующий для перехвата событий JIT интерфейс IObjectControl. (Интерфейс IObjectControl подробно описывается в следующем разделе.) У этого метода будет два компонента, каждый из которых вызывает метод SetDeactivateOnReturn интерфейса IContextState. Первая функция будет вызывать метод, передавая логическое значение False, вторая — True.

Создайте проект Visual Basic и назовите его asp0501, а класс генерируемого компонента — done. Присоедините к проекту библиотеки типов служб COM+ и Microsoft Active Server Pages. Коль скоро библиотеки типов добавлены как ресурсы, реализуйте, как показано в листинге 5.1, JIT-методы Activate, Deactivate и CanBePooled интерфейса IObjectControl.

Листинг 1. Реализация JIT-функций интерфейса IObjectControl

Dim objResponse As Response

Private Sub ObjectControl_Activate()
Set objResponse = GetObjectContext().Item(«Response»)
objResponse.Write «

Активирован

Private Sub ObjectControl_Deactivate()
objResponse.Write «

Деактивирован

Private Function ObjectControl_CanBePooled() As Boolean
ObjectControl_CanBePooled = False
End Function

В методе Activate созданная ссылка на встроенный ASP-объект Response используется для отображения сообщения о том, что метод активирован. В методе Deactivate на web-страницу выводится сообщение о том, что компонент деактивирован.

Далее, добавьте две функции компонента, вызываемые ASP-страницей. Первая, под именем function1, обращается к интерфейсу IContextState и вызывает его метод SetDeactivateOnReturn, передавая значение False. Вторая функция, function2, также вызывает метод SetDeactivateOnReturn, но на сей раз передается значение True. В листинге 5.2 приведен программный код обеих функций, который и нужно добавить к нашему компоненту.

Листинг 2. Подпрограммы, вызывающие метод SetDeactivateOnReturn

Dim iCntxt As IContextState
Set iCntxt = GetObjectContext

iCntxt.SetDeactivateOnReturn False
End Sub

Dim iCntxt As IContextState
Set iCntxt = GetObjectContext

iCntxt.SetDeactivateOnReturn True
End Sub

После того как проект компонента скомпилирован и добавлен к приложению COM+, протестируйте новый компонент с помощью ASP-сценария примерно такого содержания (как в странице asp0501.asp):

Первой вызывается функция function2, деактивирующая компонент при возвращении значения функцией. Благодаря этому при обращении к функции компонента будет отображаться сообщение «Активирован», а при возвращении функцией значения будет отображаться сообщение «Деактивирован» еще до сообщения «Вызов function 1».

Следует заметить, что при вызове первой функции, не деактивирующей компонент, сообщение «Деактивирован» при возвращении функцией значения не появится.

Наконец, при повторном вызове функции function2, должны быть отображены оба сообщения, «Активирован» и «Деактивирован», при этом генерируется web-страница со следующими сообщениями:

Вызов function 2

Вызов function 1

Вызов function 2

Как можно видеть, в интерфейсе IContextState управлять активацией компонента можно, не оказывая влияния на транзакцию компонента, независимо от того, участвует компонент в транзакции или нет.

Интерфейс IObjectControl

В этом разделе показано, как можно управлять временем жизни (lifetime) компонента с помощью интерфейса IContextState. В примере также используется активация по требованию (just-in-time activation, JIT) — для управления созданием экземпляра компонента и записи на web-страницу с помощью методов Activate и Deactivate интерфейса IObjectControl сообщений об активации и деактивации компонента.

Разрешение активации по требованию компонента означает, что компонент активируется, только когда он реально требуется, а не при первоначальном создании на ASP-странице. Кроме того, компонент деактивируется, только когда он помечается как готовый к деактивации, удаляется внутри ASP-страницы (например, установлен в Nothing, если вы работаете с VBScript) или процесс выходит за пределы страницы.

Процесс активации и деактивации управляется COM+ с помощью программных ключей, указываемых разработчиками, как, например, тот, что показан в этом разделе для вызова метода SetDeactivateOnReturn интерфейса IContextState.

Как разработчик компонента, вы можете перехватывать моменты активации и деактивации компонента путем реализации методов Activate и Deactivate интерфейса IObjectControl. В этом случае вы не зависите от ресурсов (типа ссылки на объект Response в листинге 5.1) в период простоя компонента и ожидания вызова его методов.

При реализации интерфейса IObjectControl вы должны реализовать и методы Activate и Deactivate — а кроме того, еще и метод CanBePooled. Этот последний метод определяет, находится ли компонент в состоянии, когда он может быть резервирован (pooled). Позднее в этой главе при описании служб COM+ мы рассмотрим резервирование (pooling) компонентов более подробно.

Чтобы воспользоваться преимуществами активации по требованию, компонент должен быть установлен в приложение COM+, а активация по требованию разрешена. Впрочем, поддержка активации по требованию в приложении COM+ для всех компонентов включена по умолчанию.

Интерфейсы IObjectControl и IObjectContext были реализованы в Windows NT и управляются посредством MTS. Фактически же, ASP-компоненты, созданные для Windows NT, за исключением использующих специфические службы NT, можно без проблем перенести на Windows 2000 и COM+, что и обсуждается в следующем разделе.

ПРИМЕЧАНИЕ
В Windows NT приходилось избегать применения обработчиков событий Initialize и Terminate, поскольку они не позволяли обратиться к экземпляру объекта ObjectContext. Это ограничение в Windows 2000 снято. И все же, по-прежнему важно рассмотреть реализацию интерфейса IObjectControl и перехват (trapping) событий Activate и Deactivate для обеспечения доступа к глобальным ресурсам и их высвобождения.

Перенос пакетов MTS в приложения COM+

В Windows NT (or Windows 9x) компонентами можно было управлять как частью пакетов (packages) MTS. Будучи частью пакета MTS, компонент мог воспользоваться некоторыми возможностями MTS, например, выполнением транзакций и активацией по требованию. Те же и многие другие возможности доступны также и в COM+, и обратиться к ним из существующих компонентов можно, перенеся в новую среду пакеты MTS, компоненты или то и другое.

Для переноса существующего пакета MTS нужно, прежде всего, экспортировать пакет в файл с расширением .pak (файл пакета MTS). Это можно сделать, щелкнув правой кнопкой мыши на существующем приложении MTS и выбрав в меню команду Export (Экспорт). Далее нужно просто следовать указаниям по экспорту в файл пакета MTS, решив, в том числе, вопрос об экспорте ролей вместе с пакетом.

Можно относительно просто перенести пакеты MTS в COM+, создав с помощью консоли служб компонентов (Component Services Console) новое приложение COM+ и установив переключатель Install Pre-built Application(s) (Установить готовое приложение). Когда мастер установки приложения COM (COM Application Install Wizard) запросит имя существующего приложения, найдите или выберите созданный ранее PAK-файл.

При импорте существующего пакета MTS в новое приложение COM+ диспетчер служб компонентов (Component Services Manager) импортирует также роли (roles) и пытается сопоставить существующую функциональность MTS новой функциональности служб COM+ — включая настройки транзакций и активации по требованию.

Вместо того чтобы сначала экспортировать пакеты MTS, а затем импортировать их в приложение COM+, можно создать пустое приложение COM+, затем воссоздать любые существующие роли и добавить их в любые существующие компоненты. В этом случае вы сможете убедиться, что свойства приложения COM+ определены в соответствии с вашими предпочтениями.

В следующем разделе обсуждаются некоторые настройки приложений COM+, влияющие на ASP-приложения.

СОВЕТ
За дополнительной информацией о работе с консолью служб компонентов (Component Services Console) обратитесь к справочной системе Windows 2000.

Активация приложений COM+

Приложения COM+ вносят дополнительные возможности для поддержки активации, транзакций и защиты компонентов, включенных в состав приложений. В частности, приложения COM+ добавляют поддержку безопасности на уровнях метода и компонента, а также поддержку внутренней и внешней активации процесса.

ПРИМЕЧАНИЕ
В этом разделе рассмотрены не все возможные службы COM+, а лишь самые необходимые для разработки ASP-компонентов, например, безопасность, транзакции и объединение объектов. Активация по требованию подробно рассмотрена в разделе «Интерфейс IObjectControl».

Управлять безопасностью ASP-приложения на уровне страницы или ресурса можно с помощью средств безопасности NTFS или средств безопасности IIS. С помощью средств ролевой безопасности приложений COM+ можно добавить и еще один уровень безопасности.

При реализации ролевой безопасности внутри приложения COM создается роль, и для этой роли добавляются пользователи. После этого при обращении к компоненту или методу компонента COM+ проверяет полномочия безопасности роли, членом которой является пользователь, в соответствии с требованиями по безопасности компонента или метода компонента, и отказывает в доступе, если полномочия пользователя этим требованиям не отвечают.

Приложение COM+ можно создать по двум различным схемам активации: активации внутри клиентского процесса и активации в изолированном процессе.

Если приложение COM+ создано как серверное, обращение к компоненту с ASP-страницы генерирует отдельную программу dllhost.exe для этого компонента и любого другого, являющегося частью приложения COM+. Поскольку компонент находится в отдельном процессе, все вызовы компонента с ASP-страницы должны маршализироваться. Вместе с тем, если компонент некачественный и генерирует нечто опасное для программного обеспечения, это нечто останется внутри файла dllhost.exe и не сможет неблагоприятно повлиять на IIS или остальные ASP-приложения.

Если создать приложение COM+ как библиотечное, при обращении к компоненту с ASP-страницы экземпляр этого компонента (и любого другого внутри приложения COM+) создается внутри того же процесса, что и ASP-страница — если только поточная модель компонента совместима. Поскольку приложения COM+ допускают апартаментно-поточную, произвольно-поточную и нейтрально-поточную модели, экземпляр компонента приложения COM+ должен создаваться внутри процесса ASP-страницы, а все вызовы между сценарием страницы и компонентом должны выполняться в том же потоке.

Службы COM+

Компонент, с помощью диспетчера служб COM+ (COM+ Services Manager) установленный как часть приложения COM+, называется сконфигурированным компонентом (configured component). Такой компонент может воспользоваться преимуществами служб COM+, например, поддержкой транзакций и активацией по требованию. Компонент, не установленный как часть приложения COM+ и зарегистрированный с помощью инструментов разработки (например, VB) или утилиты regsvr32.exe, называется несконфигурированным компонентом (unconfigured component). Этот тип компонента использовать в ASP-приложениях можно, но реализовать интерфейс IObjectControl, воспользоваться преимуществами активации по требованию или применить объект ObjectContext для поддержки транзакций нельзя. Можно, однако, как и прежде, обратиться с помощью объекта ObjectContext к встроенным объектам ASP.

Одним из основных доводов в пользу добавления компонента в приложение COM+ является желание применить компонент в транзакциях. Это момент обсуждается в следующем разделе.

Поддержка транзакций

Одна из проблем при работе с компонентами, построенными на основе технологий COM/DCOM, состоит в том, что связь компонентов, особенно удаленная связь, весьма непроста. Выяснение того, успешно ли завершена обработка компонента, что делать дальше и как восстановить задачу, если один из компонентов не смог ее выполнить, а остальные — смогли, может превратить распределенную систему в плохо реализуемую и трудно управляемую.

Для упрощения этого процесса был разработан сервер MTS, осуществляющий большую часть администрирования распределенной системы. Такой подход гарантирует, что транзакция будет либо целиком успешно завершена, либо, наоборот, целиком не завершена. MTS также управляет процессами и потоками приложения, то есть тем, что становится очень критичным, когда некоторый компонент вызывает методы другого, а тот, в свою очередь, методы еще одного компонента и так далее:

Кроме того, MTS предоставляет менеджеров (managers) и диспетчеров (dispensers) ресурсов, которые управляют данными хранилищ, например, данными баз данных. По сути, любая система баз данных, поддерживающая транзакции OLE, скажем, SQL Server, может участвовать в транзакциях, управляемых MTS. Это означает, что если компонент, участвующий в транзакции, выполняется с ошибкой, то можно отозвать (вернуть к прежнему состоянию) не только его действия и действия других компонентов, но и любое действие, произведенное базой данных.

Все возможности MTS по работе с транзакциями реализованы в службах COM+ и доступны для сконфигурированных компонентов. Отличие состоит в том, что в COM+ (и Windows 2000) присутствует интерфейс IContextState, позволяющий отделить активацию компонента от управления транзакциями. Этот интерфейс способен сигнализировать, собирается ли компонент принять или прервать транзакцию, при этом компонент остается активированным, как было ранее показано в листинге 5.1.

Что такое транзакции?

Если вы имели опыт работы с коммерческими базами данных, например, с Oracle, Sybase и Microsoft SQL Server, то, возможно, знаете, что представляют собой транзакции. Транзакция (transaction) — это одна или несколько задач, некоторым образом логически сгруппированных, причем все задачи, объединенные в данную группу, либо все вместе успешно завершаются, либо все вместе не выполняются, если хотя бы одна из задач внутри транзакции не выполнена. Если транзакция не состоялась, никаких изменений данных, связанных с данной транзакцией, не делается. Если же выполнение транзакции происходит успешно, все изменения данных принимаются. В качестве примера транзакции с несколькими задачами можно привести перевод денег со сберегательного на расчетный счет. Хотя это и похоже на одну транзакцию, в действительности, происходят сразу две транзакции. Первая транзакция состоит в снятии ваших денег со сберегательного счета (то есть они дебетуются на счет), вторая транзакция заключается в переведении этих денег на расчетный счет (то есть они кредитуются на расчетный счет) . Если операция снятия денег со сберегательного счета прошла успешно, а операция по переводу денег на расчетный счет не была выполнена, вы, весьма вероятно, захотите, чтобы целиком вся транзакция была отозвана и начата заново. Транзакции очень существенны для систем, обновляющих несколько структур данных, например, баз данных. Такие обновления, даже основанные на одной операции, должны быть успешно завершены сразу для всех структур данных, именно для того, чтобы обеспечить успешное завершение одной этой операции.

В модели COM+ эти представления расширены благодаря введению в методику разработки компонентов концепции управления транзакциями. Кроме того, благодаря обработке большинства сообщений об успехе или неудаче транзакции, процесс разработки приложений, основанных на распределенных компонентах, существенно упрощается.

Участие компонентов в транзакциях

Компонент может воспользоваться возможностями транзакций COM+, если он удовлетворяет следующим условиям. Во-первых, компонент должен быть внутрипроцессным сервером (то есть DLL). Во-вторых, он не должен быть свободно-поточным. Далее, если компонент создан в Visual С++, он должен реализовать фабрику классов (class factory) и использовать стандартную маршализацию. Кроме того, для компонента нужно будет создать библиотеку типов.

Если компонент удовлетворяет минимальным требованиям, чтобы получить поддержку транзакций, он должен быть зарегистрирован в COM+. В процессе регистрации тип транзакции, в которой участвует компонент, устанавливается в качестве свойства компонента. Например, на рис. 3 показано окно свойств компонента, для которого требуется транзакция, время ожидания завершения которой определено в 10 секунд.

Чтобы начать транзакцию на ASP-странице, поместите первой строкой страницы следующую директиву:

Для работы с транзакциями компонент должен ссылаться на экземпляр объекта ObjectContext (или интерфейса IObjectContext) или экземпляр интерфейса IContextState. Пометить компонент как готовый к принятию транзакции можно с помощью метода SetComplete объекта ObjectContext или метода SetMyTransactionVote интерфейса IContextState:

Пометить транзакцию для отзыва можно с помощью тех же интерфейсов:

Транзакции COM+ в действии показаны в примерах главы 9, посвященной созданию ASP-компонентов промежуточного слоя с помощью ADO. В этих примерах транзакции выполняются для обновления баз данных — и это их традиционное применение. Транзакции с базами данных можно выполнять непосредственно (не прибегая к транзакциям COM+) с помощью объекта ADO Connection. Тем не менее, примеры этой главы продемонстрируют, что гораздо удобней наладить взаимодействие компонентов и баз данных посредством транзакций COM+.

Транзакции COM+ можно также использовать для управления взаимодействием с другими ресурсами, например, с сообщениями в очереди сообщений. В главе 13, посвященной работе с компонентами MSMQ, транзакции управляют непрерывным удалением сообщений из очереди по мере получения к ним доступа.

Помимо поддержки транзакций и активации по требованию, службы COM+ могут также обеспечивать резервирование (pooling) компонентов.

Резервирование компонентов

Ранее уже отмечалось, что у интерфейса IObjectControl есть три метода: Activate, Deactivate и CanBePooled. У вас уже была возможность поработать с методами Activate и Deactivate, но для резервирования компонентов важен именно метод CanBePooled.

В случае резервирования объектов при пуске приложения COM+ создается минимальный резерв, или пул (pool), компонентов, и все запросы компонента обслуживаются из этого пула посредством менеджера пула (pool manager). Если менеджер получает запрос большего, чем имеется в пуле, числа экземпляров компонента, он создает другой экземпляр компонента, добавляя его в пул — до достижения максимального размера пула. Если же максимальный размер пула достигнут, запрос ставится в очередь до тех пор, пока компонент не станет доступным.

Компоненты, объединяемые в пул, должны соответствовать определенному набору условий. Во-первых, компонент не должен быть отдельно-поточным. Далее, компонент должен поддерживать агрегирование (aggregation), однако при этом свободно-поточный составитель (Free-Threaded Marshaler, FTM) использоваться не может.

Если компонент участвует в транзакциях, придется вручную привлечь ресурсы и вручную отключить автоматическое привлечение ресурсов (процесс, отличающийся от управления ресурсами и в этой книге не рассматриваемый).

Если компонент обращается к ресурсам, он должен реализовать три метода интерфейса IObjectControl — Activate, Deactivate и CanBePooled. Обратиться к ресурсу можно с помощью метода Activate (когда компонент создается на клиентской ASP-странице). Этот ресурс может быть высвобожден при высвобождении компонента клиентом (с помощью метода Deactivate). Кроме того, компонент обязан проверить, находятся ли его ресурсы в состоянии, когда их можно резервировать при деактивации компонента. Если резервирование возможно, метод компонента CanBePooled должен возвратить значение True, в противном случае, компонент должен возвратить значение False, чтобы предотвратить возврат компонента в пул.

Наконец, состояние компонента не должно зависеть от сеанса.

Создать резервируемый компонент можно с помощью Visual C++ (или любого другого языка, поддерживающего свободно-поточную или произвольно-поточную модели). Для демонстрации резервирования объектов создайте с помощью мастера ATL COM AppWizard новый проект Visual С++ и назовите его asp0502. Оставьте установленные по умолчанию параметры для MTS, MFC, заместителя (proxy) и исполнителя (stub).

После генерации файлов проекта добавьте новый компонент с помощью мастера ATL Object Wizard. (Подробно работа с этим мастером рассмотрена в главе 14.) Выберите тип Simple Object (Простой объект). Назовите компонент pooledComponent, на вкладке Attributes (Атрибуты) выберите произвольно-поточную модель и поддержку агрегирования (но не поддержку FTM).

Для поддержки интерфейса IObjectControl добавьте в определения класса в файле pooledComponent.h следующую строку:

Добавьте в данные COM ссылку на карту COM (COM map):

При работе с компонентом вам придется обращаться к интерфейсу IObjectContext и встроенному объекту ASP Response, поэтому добавьте в заголовочные файлы библиотеки типов службы COM+ и ASP следующее:

Следует также добавить прототипы метода интерфейса IObjectControl и ссылку на два закрытых (private) члена данных типа интерфейсов IObjectContext и IResponse (встроенного объекта ASP Response). Полный программный код заголовочного файла для резервируемого компонента показан в листинге 5.3.

Листинг 3. Заголовочный файл резервируемого компонента

// pooledComponent.h : объявление CpooledComponent

#ifndef __POOLEDCOMPONENT_H_
#define __POOLEDCOMPONENT_H_

#include «resource.h» // основные символы
#include
#include

/////////////////////////////////////////////////////////////////
// CpooledComponent
class ATL_NO_VTABLE CpooledComponent :
public CComObjectRootEx ,
public CComCoClass ,
public IObjectControl,
public IDispatchImpl
<
public:
CpooledComponent()
<
>

BEGIN_COM_MAP(CpooledComponent)
COM_INTERFACE_ENTRY(IpooledComponent)
COM_INTERFACE_ENTRY(IObjectControl)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()

// IpooledComponent
public:
STDMETHOD(Activate)();
STDMETHOD_(BOOL, CanBePooled)();
STDMETHOD_(void, Deactivate)();

private: CComPtr m_spObjectContext;
CComPtr m_piResponse;
>;

Далее, с помощью вкладки Link (Связь) диалогового окна Project Settings (Настройки проекта) добавьте в список связанных библиотек проекта библиотеку служб COM+ (comsvcs.lib).

Вам придется реализовать три метода интерфейса IObjectControl. В CPP-файле компонента добавьте код, показанный в листинге 5.4. В этом коде экземпляры IObjectContext и IResponse создаются в методе Activate и высвобождаются в методе Deactivate. Кроме того, метод CanBePooled возвращает значение True и помечает, что компонент можно резервировать (помещать в пул).

Листинг 4. Реализация компонентом методов интерфейса IObjectControl

HRESULT CpooledComponent::Activate()
<
HRESULT hr;
CComBSTR bstrProp;
CComVariant vt;
CComPtr pProps; //Свойства контекста

// получение ObjectContext
hr = CoGetObjectContext(IID_IObjectContext,
(void **)&m_spObjectContext);

if (FAILED(hr)) return hr;

// получение ContextProperties
hr = m_spObjectContext
->QueryInterface( IID_IGetContextProperties,
(void**)&pProps );
if (FAILED(hr)) return hr;

// получение свойства Response
bstrProp = «Response»;
hr = pProps->GetProperty( bstrProp, &vt ) ;
if (FAILED(hr)) return hr;

p > hr = piDispatch->QueryInterface( IID_IResponse,
(void**)&m_piResponse );
return hr;
>

void CpooledComponent::Deactivate()
<
m_piResponse.Release();
m_spObjectContext.Release();
>

BOOL CpooledComponent::CanBePooled()
<
return TRUE;
>

Откомпилируйте теперь компонент, чтобы убедиться, что необходимый программный код и библиотеки добавлены.

С помощью вкладки ClassView (Просмотр классов) добавьте новому компоненту не принимающий никаких параметров метод testPooledComponent. Этот метод прост: он выдает с помощью объекта Response сообщение для web-страницы. Добавьте компоненту программный код метода, показанный в листинге 5.5.

Листинг 5. Единственный метод резервированного компонента

STDMETHODIMP CpooledComponent::testPooledComponent()
<
// печать сообщения
CComVariant vt(«Привет от резервированного компонента»); m_piResponse->Write(vt);

Чтобы воспользоваться резервированием компонентов, компонент нужно добавить в приложение COM+. Создайте новое приложение — с помощью консоли управления службами компонентов (Component Services Management Console) — или воспользуйтесь существующим приложением COM+ и добавьте компонент в приложение.

Добавив компонент в приложение COM+, откройте с помощью контекстного меню диалоговое окно Properties (Свойства) и перейдите на вкладку Activation (Активация). Установите флажок объединения компонентов, задайте минимальный размер пула 10, максимальный — 20.

При первом запуске приложение COM+ создает пул из 10 уже созданных компонентов. При обращении с ASP-страниц к этим компонентам они извлекаются из этого пула до тех пор, пока все не будут активированы. После этого все новые вызовы компонентов будут добавлять экземпляры этих компонентов в пул, пока не будет достигнут максимальный размер пула в 20 экземпляров.

Протестируйте компонент с помощью следующей тестовой ASP-страницы (asp0502.asp):

На этой странице создаются 20 экземпляров компонента и вызывается метод каждого из компонентов. Результатом обращения к этой ASP-странице будет список сообщений со строкой «Привет от резервированного компонента». Первые 10 экземпляров были созданы при запуске приложения COM+, а последние 10 — при обращении к ASP-странице.

Измените теперь число экземпляров на 21 и обратитесь к ASP-странице. Похоже, она виснет. Это происходит потому, что менеджер пула выдал все компоненты из доступного пула, вследствие чего достигнут максимальный размер пула. Запрос 21-го компонента ставится в очередь до тех пор, пока какой-нибудь компонент не освободится. Но поскольку до завершения страницы все компоненты остаются недоступными, а запрос компонента происходит на той же самой странице, экземпляр 21-го компонента не может быть создан, и страница зависает. Фактически страница будут продолжать висеть до истечения времени ожидания запроса компонента. После этого страница выведет следующее сообщение об ошибке («активация COM+ не удалась, поскольку она не может быть завершена в течение заданного времени»):

COM+ activation failed because the activation could not be
completed in the specified amount of time.

Как было показано, резервирование объектов может служить весьма мощным ускорителем производительности, но оно же может и ограничить масштабируемость (scalability) или истощить ресурсы (поскольку резервируемые компоненты удерживаются в памяти). Пользуйтесь этой службой COM+ с осторожностью.

Илон Маск рекомендует:  Установка apache
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL