Asp файл content schedule


Содержание

Маршрутизация запросов к файлам

ASP.NET — ASP.NET MVC 5 — Маршрутизация запросов к файлам

Не все запросы в приложении MVC относятся к контроллерам и действиям. В большинстве приложений необходим способ обслуживания такого содержимого, как изображений, файлов со статической HTML-разметкой, библиотек JavaScript и т.д. В целях демонстрации мы создали папку Content и добавили в нее файл по имени StaticContent.html, используя шаблон HTML Page (Страница HTML). Содержимое этого файла показано в примере ниже:

Система маршрутизации предоставляет интегрированную поддержку для обслуживания такого содержимого. Запустив приложение и запросив URL вида /Content/StaticContent.html, вы увидите содержимое этого простого HTML-файла, отображаемое в браузере:

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

Если есть соответствие между запрошенным URL и файлом на диске, данный файл обслуживается, и маршруты, определенные в приложении, использоваться не будут. Установив в true свойство RouteExistingFiles коллекции RouteCollection, это поведение можно изменить на противоположное, и маршруты будут проверяться перед дисковыми файлами:

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

Конфигурирование сервера приложений

В среде Visual Studio в качестве сервера приложений для проектов приложений MVC используется IIS Express. Мы не только должны установить в true свойство RouteExistingFiles в методе RegisterRoutes(), но также обязаны сообщить серверу IIS Express о том, что ему не следует перехватывать запросы к дисковым файлам перед их передачей системе маршрутизации.

Прежде всего, запустите IIS Express. Проще всего это сделать, запустив приложение MVC из Visual Studio, что приведет к появлению значка IIS Express в панели задач. Щелкните правой кнопкой мыши на этом значке и выберите в контекстном меню пункт Show All Applications (Показать все приложения). Щелкните на элементе UrlsAndRoutes в столбце Site Name (Имя сайта), чтобы отобразить сведения о конфигурации IIS Express:

Щелкните на ссылке Config (Настройка) в нижней части окна, чтобы открыть конфигурационный файл IIS Express в среде Visual Studio. Нажмите и поищите строку «UrlRoutingModule-4.0». Ниже показана запись, которая должна быть найдена в разделе modules конфигурационного файла — в ней необходимо установить атрибут precondition в пустую строку, примерно так:

Теперь перезапустите приложение в Visual Studio, чтобы измененные параметры вступили в силу, и перейдите на URL вида /Content/StaticContent.html. Вместо содержимого файла выводится сообщение об ошибке, представленное на рисунке ниже:

Такая ошибка возникает из-за того, что запрос к HTML-файлу был передан системе маршрутизации MVC, но маршрут, соответствующий URL, направляет на контроллер Content, которого не существует.

Определение запросов для дисковых файлов

После установки свойства RouteExistingFiles в true можно определять маршруты для сопоставления с URL, которые соответствуют дисковым файлам, как показано в примере ниже:

Этот маршрут отображает запросы к URL вида Content/StaticContent.html на действие List контроллера Customer. На рисунке ниже данное отображение URL показано в работе, для чего приложение было запущено и произведен переход на URL вида /Content/StaticContent.html:

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

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

Например, как было показано в предыдущем примере, запрос /Content/StaticContent.html будет соответствовать шаблону URL вида /. Не проявив должной осторожности, вы можете получить исключительно странные результаты и сниженную производительность. Таким образом, устанавливать свойство RouteExistingFiles в true следует только в крайнем случае.

Обход системы маршрутизации

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

Противоположностью этого средства является возможность сделать систему маршрутизации менее инклюзивной и предотвратить оценку URL относительно маршрутов. Это делается с применением метода IgnoreRoute() класса RouteCollection, как показано в примере ниже:

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

Метод IgnoreRoute() создает элемент в коллекции RouteCollection, где обработчик маршрутов представляет собой экземпляр класса StopRoutingHandler, а не класс MvcRouteHandler. Система маршрутизации жестко закодирована для распознавания этого обработчика. Если переданный методу IgnoreRoute() шаблон URL обеспечивает соответствие, то последующие маршруты не оцениваются, как это происходит в случае совпадения с обычным маршрутом. Из этого следует, что место размещения вызова метода IgnoreRoute() играет важную роль.

Лекция 1. Что такое ASP.NET. Инсталляция и тестовый проект.

Введение

Microsoft .NET Framework — это платформа для создания, развертывания и запуска Web-сервисов и приложений. Она предоставляет высокопроизводительную, основанную на стандартах, многоязыковую среду, которая позволяет интегрировать существующие приложения с приложениями и сервисами следующего поколения, а также решать задачи развертывания и использования интернет-приложений. .NET Framework состоит из трех основных частей — общеязыковой среды выполнения (common language runtime), иерархического множества унифицированных библиотек классов и компонентной версии ASP, называемую ASP.NET.

ASP.NET – это часть технологии .NET, используемая для написания мощных клиент-серверных интернет приложений. Она позволяет создавать динамические страницы HTML. ASP.NET возникла в результате объединения более старой технологии ASP (активные серверные страницы) и .NET Framework. Она содержит множество готовых элементов управления, используя которые можно быстро создавать интерактивные web-сайты. Вы также можете использовать сервисы, предоставляемые другими сайтами, прозрачно для пользователей вашего сайта. В общем, возможности ASP.NET ограничены только вашим воображением.

Давайте обсудим, что такое динамические страницы HTML и чем они отличаются от статических. Статическая страница содержит код на языке гипертекстовой разметки HTML. Когда автор страницы пишет ее, он определяет, как будет выглядеть страница для всех пользователей страницы. Содержание страницы будет всегда одинаковым независимо от того, кто и когда решит ее просмотреть. Языка HTML вполне достаточно для отображения информации, которая редко изменяется и не зависит от того, кто ее просматривает. Страница HTML — простой ASCII-текст, следовательно, клиент может работать в любой операционной системе.

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

Но что, если мы хотим отобразить на странице текущий курс евро или прогноз погоды? Если мы написали страницу HTML вчера, сегодня она уже устареет. Следовательно, мы должны уметь создавать динамические страницы. Динамическое наполнение страницы – это информация, содержание которой определяется тем, кому она предназначена, и которая отличается от просмотра к просмотру. Оно позволяет обеспечить двусторонний обмен информацией – от клиента к серверу и обратно.

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

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

Существуют языки, способные динамически изменять содержимое веб-страницы. С одной стороны, это языки скриптов, выполняющиеся непосредственно у клиента. Примеры скриптовых языков — JavaScript и VBScript. Скрипты на этих языках встроены в код HTML, который сервер посылает браузеру. Сценарии, выполняемые на стороне клиента, выделяются тегами и . Браузер интерпретирует этот код и показывает пользователю результат. Сам код можно просмотреть через View Source браузера. Естественно, эти программы не могут быть большими. Например, если нужно выполнить поиск в базе данных, мы не может отправить пользователю все ее содержимое. Но скрипты могут проверить правильность запроса, введенного в форму, тогда не придется перезагружать сервер обработкой неправильных запросов. Некоторые программисты создают на JavaScript анимационные эффекты. Одна студентка intuit.ru желала найти скрипт, который бы отправлял SMS-сообщения. Увы, это невозможно. Выполняемых на стороне клиента сценариев недостаточно для создания полноценных динамических страниц. Даже если на странице используется JavaScript, анимированные картинки .gif, она называется статической.

Динамическая веб-странице должна быть создана «на лету» программой, исполняющейся на интернет-сервере. Широко применяются механизм шлюзов CGI(Common Gateway Interface). Вначале пользователь получает статическую страницу с формой. Вам известно, что в теге FORM существует атрибут ACTION. Именно он задает адрес (URL) исполняемого приложения. На сервере находятся исполняемые файлы программ, написанных, например на C/С++ или Дельфи, которые по протоколу HTTP принимают данные из входного потока или из переменных окружения и записывают в стандартный выходной поток готовую страницу.

Пользователю в ответ на запрос посылается HTML код, который был специально сгенерирован для него. Это может быть, например, результат поиска в поисковой системе. CGI -скрипты могут быть написаны на интерпретируемом языке (Perl) или даже скрипте командной строки. Входной и выходной потоки переназначаются. На вход интернет-сервер принимает данные, введенные пользователем. После обработки полученных данных, пользователю возвращается результирующая страница. При исполнении cgi-программа загружается в память сервера, а при завершении – удаляется. Когда 100 клиентов одновременно обращаются к серверу, в памяти создаются 100 процессов, для размещения кода каждого из которых нужна память. Это отрицательно сказывается на масштабируемости. Напомним, что масштабируемость — это возможность плавного роста времени ответа программной системы на запрос с ростом числа одновременно работающих пользователей.

Для решения это проблемы Microsoft была предложена альтернатива – ISAPI(Internet Server Application Programming Interface)-расширения и фильтры. Вместо исполняемых файлов используются DLL – библиотеки. Код DLL находится в памяти все время и для каждого запроса создает не процессы, а нити исполнения. Все нити используют один и тот же программный код. ISAPI –приложение выполняется в процессе IIS-сервера. Это позволяет повысить производительность и масштабируемость.

ISAPI-расширения можно создавать в Visual Studio C++ 6.0, пользуясь мастером.

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

Скриптовые языки, исполняющиеся на стороне сервера – php и asp. Технология asp была разработана Microsoft в 90-х годах.

Выполнение кода asp поддерживается ISAPI-расширением сервера. В диалоге конфигурации сервера IIS определяются способы обработки файлов с различными расширениями. Для обработки URL-адреса с расширением в установках сервера определен файл asp.dll. Файлы asp отправляются к нему на обработку. На вход поступает asp, а на выходе имеем поток HTML-кода.

Пример файла asp:

Тег сигнализирует asp, что в нем находится код, который он должен обрабатывать на сервере. Выполняется скрипт на языке, который указан в директиве Language. Оператор Response.Write записывает текст в выходной поток сервера, таким образом, он становится частью HTML-страницы, отправленной пользователю.

Технология asp была ограничена по своим возможностям. Он использовал скриптовые языки, которые имеют меньше возможностей, чем полнофункциональные языки программирования. Код asp был встроен в HTML в виде специальных тегов, что создавало путаницу. Кусочки asp были разбросаны по нему, как изюм в булке. Но HTML код обычно создают дизайнеры, которые умеют «делать красиво», а asp – программисты, которые заставляют все это работать. В ASP.NET вы можете держать код asp и HTML в разных файлах.

Скриптовые языки не поддерживают строгую типизацию. Что это значит? Вы можете не описывать переменную до ее использования и можете присваивать ей значения разных типов. Это удобно, но создает почву для ошибок. Например, у вас есть переменная x1, и вы присваиваете ей значение 1, но вы сделали опечатку и по ошибке написали x2=1. Будет создана новая переменная x2, а значение x1 не изменится. В языке со строгой типизацией компилятор заметит, что переменная x2 не описывалась, и выдаст ошибку.

В 2000 году на конференции разработчиков в качестве части новой технологии .NET Microsoft представила ASP+. С выходом .NET Framework 1.0 она стала называться ASP.NET.

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

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

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

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

ASP.NET использует технологию доступа к данным ADO.NET, которая обеспечивает единый интерфейс для доступа к базам данных SQL Server и файлам XML. Кроме того, усиленная модель безопасности позволяет обеспечивать защиту клиента и сервера от несанкционированного доступа.

В 2004 году появилась версия ASP.NET 2.0(бета-версия, окончательный выход – конец 2005-начало 2006). Как утверждается, эта версия позволяет сократить объем кодирования на 70%. Новые возможности версии 2.0 – например, использование шаблонов дизайна страниц(Master Page), упрощенная локализация Web-приложений, более 50 новых серверных элементов управления. Цели, которые преследовали разработчики новой версии – повысить скорость разработки сайтов, масштабируемость, легкость поддержки и администрирования сайтов, скорость работы сервера. Появилась панель остнастки MMC (консоль управления Microsoft), предоставляющая графический интерфейс для управления настройками ASP.NET. Изменять настройки проекта теперь можно и через web-интерфейс. ASP.NET 2.0 поддерживает работу на 64-битных процессорах. Сервис персонализации (personalization) предоставляет готовое решение для хранения персональных данных, непосредственно характеризующих пользователя сайта, так называемого профиля пользователя (Profile).

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

Предыдущие версии Visual Studio для проектов ASP.NET требовали наличия на машине разработчика сервера IIS. Теперь сервер встроен в среду разработки.

ASP.NET 2.0 и Visual Studio 2005 предоставляют инструменты для легкого построения локализируемых сайтов, которые определяют предпочитаемый язык пользователя и посылают ему страницы на его языке.

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

В ASP.NET 2.0 встроена технология автоматического обновления кэширования баз данных. Данные, полученные из базы, хранятся на сервере и он не обращается к базе для обработки повторного запроса. При изменении базы данных кэш обновляет свое содержимое.

ASP.NET — это технология, а не язык, и позволяет программировать на разных языках – С#, Visual Basic, J#. В платформе .NET все языки равны, но некоторые равнее(Дж. Оруэлл). Вот таким языком и является С#, потому что он был специально создан для этой платформы. Программирование C# позволяет в полной мере использовать концепции, методы и паттерны объектно-ориентированной разработки. Язык Visual Basic 8.0 наделен почти теми же возможностями. Чтобы научиться ASP.NET, вам нужно знать основы HTML, а знание asp не обязательно. Оно может даже помешать, так как придется менять образ мышления. Также для понимания многих желательно знать CSS и JavaScript.

Процесс инсталляции

ASP .NET 2.0 можно установить на компьютерах с ОС Windows 2000 с Service Pack 4, Windows XP с Service Pack 2 и более поздними версиями Windows. Готовые сайты предпочтительно устанавливать на Windows Server 2003.

Для разработки приложения можно использовать любую среду разработки или даже текстовый редактор, при условии, что у вас есть доступ к IIS. Если же вы хотите воспользоваться всей мощью Microsoft .NET Framework и ASP.NET и при этом, затратить как можно меньше усилий, то нужно воспользоваться средой разработки, специально разработанной для программирования ASP.NET 2.0.

Если вы приобретете Visual Studio .NET 2005, то для работы достаточно будет только его. .NET Framework содержится на дисках. В его состав входит Visual Web Developer, который позволяет создавать профессиональные веб-приложения, а также desktop-приложения на разных языках программирования. Продукты Microsoft выпускаются на DVD, но есть набор из двух CD от «Мегасофт». Visual Studio .NET 2005 требует около 2 Гигабайт дискового пространства. При этом инсталлируется ASP.NET 2.0, среда разработки, SQL Server Express, встроенный веб-сервер, Crystal Reports со специальными элементами управления для ASP.NET 2.0.
Бесплатно распространяемое программное обеспечение.

Visual Web Developer 2005 Express Edition – свободно распространяемая среда предназначенный для новичков и студентов, доступная по адресу http://msdn.microsoft.com/vstudio/express/vwd/. Список отличий VWD от Visual Studio.NET 2005 невелик и для начинающих несущественен, он приведен здесь: http://msdn.microsoft.com/vstudio/products/compare/default.aspx

Инсталлятор VWD имеет объем 2,8 Мб, но в процессе инсталляции он загрузит еще 40 Мб и 80 Мб, если захотите установить документацию. При этом также будет установлен .NET Framework с ASP.NET 2.0.

Системные требования – процессор с минимальной скоростью 600 МГц, 128 МБ памяти и 1.3 ГБ дискового пространства. После инсталляции нужно будет зарегистрировать свою установку, это совершенно бесплатно.

В качестве среды разработки вы можете выбрать WebMatrix. Эта программа совмещает в себе редактор и http-сервер. Ее можно загрузить на http://www.asp.net/WebMatrix.

У WebMatrix инсталлятор размером всего 1.2 Мб, но у него меньше возможностей, чем у VWD. Но, в общем, эти среды разработки похожи. У WebMatrix есть неприятная особенность – она дает запрос на сохранение во время закрытия файлов, которые не редактировались. VWD Express позволяет одним нажатием кнопки открыть Web-интерфейс конфигурирования проекта. В VWD работает технология IntelliSense, которая автоматически предлагает возможные в данном месте элементы кода.

Если вы решили работать с WebMatrix, вы должны установить на своей машине .NET Framework 2.0 и ASP.NET 2.0.

Если у вас операционная система Windows Server 2003, то .NET Framework уже предустановлен. Вы можете проверить, есть ли вас директория %WINSDIR%Microsoft.NETFramework. Если нет, вы можете ее загрузить на сайте Microsoft. Последние версии находятся по адресу http://msdn.microsoft.com/netframework/downloads/updates

На данный момент это .NET Framework 2.0, но к моменту, когда вы будете читать эту лекцию, могут появиться более новые версии. Вы можете скачать новую версию, даже если у вас уже есть другая. Они будут существовать на компьютере одновременно в поддиректориях %WINSDIR%Microsoft.NETFramework, с именем, соответствующим номеру версии. Можно сказать, что каждая версия представляет собой сборку. Система версий поддерживается для всех приложений, созданных с использованием .NET Framework.

Там вы увидите ссылки на .NET Framework для разных архитектур компьютера.

При желании загрузите .NET Framework Version 2.0 SDK, которая содержит наряду с .NET Framework Version 2.0 SDK документацию и примеры, которые могут оказаться полезными.

По адресу http://asp.net/default.aspx можно найти много полезных для разработчиков программных продуктов, примеров кода и статей.

IIS(Internet Information Server) находится на инсталляционном диске Windows 2000/XP, но предустановлен только на серверах. Его можно установить, зайдя в Control Panel->Add or Remove Programs->Add/Remove Windows Components. Компьютер попросит вас вставить инсталляционный диск.

IIS может понадобиться, если вам нужен полноценный сервер для работы в интернет, а не просто на своем компьютере или в локальной сети или вы решили набирать текст в обычном редакторе. Для работы на своем компьютере во все эти среды разработки встроен сервер Cassini, который первоначально появился как часть WebMatrix. Символ WebMatrix – планета Сатурн, а Кассини — известный исследователь Сатурна. Предыдущие версии Visual Studio требовали наличия IIS, но теперь Cassini встроен и в Visual Studio 2005, что позволяет работать даже в Windows XP Home Edition.

Примеры будут даваться как для WebMatrix, так и Visual Studio. Некоторые примеры требуют VWD Express или Visual Studio.
Сообщества разработчиков.

Через меню помощи Visual Web Developer Express можно зайти на сайты форума по ASP.NET. А вот адреса сайтов на русском языке:

* http://www.aspnetmania.com
* http://www.gotdotnet.ru/
* http://www.sql.ru/
* http://dotsite.ru/
* http://www.rsdn.ru/

Вы можете завести пробный хостинг на http://europe.webmatrixhosting.net/russia/default.aspx.

Первый проект

Вначале решите, в какой директории будете создавать страницы. Все файлы, находящиеся в одной директории, считаются единым проектом.Запустите выбранную вами среду разработки. Выберите пункт меню File-New-Website. Появится диалоговое окно. Назначьте в нем имя проекта и выберите язык программирования С#.

По умолчанию проект создается в файловой системе. По желанию его можно создать на HTTP или FTP-сервере. Из файловой системы проект всегда можно скопировать на сервер нажатием одной кнопки в заголовке Solution Explorer.

В проекте будет создана страница default.aspx. Выберите ее, и появится окно редактирования с закладками Design и Source. Не меняя ничего, щелкните на кнопке со стрелкой, чтобы просмотреть страницу в браузере. Появится окно, котором спрашивается, нужно ли добавить в файл web.config возможность отладки. Нажмите OK. На панели задач должен появиться значок веб-сервера. Откроется браузер, показывающий страницу по адресу http://localhost:номерпорта/Website1/default.aspx. localhost обозначает сервер, работающий на вашем компьютере. Встроенный сервер Cassini сам назначает себе номер порта – для каждого проекта он разный. Сервер IIS обычно работает через порт 80(или 8080, если тот занят), и для него номер порта указывать не нужно. При этом ваша страница будет скомпилирована.

Пока что страница в бразере пустая.

Но исходный код этой страницы не пустой. Программа сгенерировала код для вас.

Databound Schedule controls / Custom Controls / ASP. NET

Contents

These are two free controls: ScheduleCalendar and ScheduleGeneral , designed to show scheduled events in the form of a table. They are simple versions of the so-called Gantt chart. They don’t have advanced features such as dependencies and milestones, but on the other hand, they use templated databinding, so it’s up to you, the developer, what you want to show.

The controls can be used for a broad variety of applications: time tables, resource usage planners, calendars, event schedulers, activities, reservations, sequences, project management, etc. See the demos for some examples.

The ScheduleCalendar control for instance will turn this data:


StartTime EndTime EventDate Task
9:00 11:00 3/8/2004 History
9:00 10:00 3/9/2004 Math
10:00 11:00 3/9/2004 Biology
11:00 12:00 3/9/2004 History
9:00 10:00 3/10/2004 Geology
10:00 12:00 3/10/2004 Math
9:00 10:00 3/11/2004 Economy
10:00 12:00 3/11/2004 Literature
9:00 12:00 3/12/2004 Sports
9:00 11:00 3/15/2004 History
9:00 10:00 3/16/2004 Math
10:00 11:00 3/16/2004 Biology
11:00 12:00 3/16/2004 History
9:00 10:00 3/17/2004 Geology
10:00 12:00 3/17/2004 Math
9:00 10:00 3/18/2004 Economy
10:00 12:00 3/18/2004 Literature
9:00 12:00 3/19/2004 Sports

into this presentation:

The other control is the ScheduleGeneral . Here you can provide your own titles (you may think of people, resources or location names). Here’s an example with TV stations:

Automatically, overlapping events will cause extra rows or columns to be added to the table, so that they can be shown correctly.

The controls are written in VB.NET, but they can be used in any ASP.NET application. You may need to slightly adapt some of the sample code below to match the language used in your application.

The controls come in two versions, one for ASP.NET 1.x ( schedule.dll ) and one for ASP.NET 2.0 ( schedule2.dll ). The second version uses some of the new classes in 2.0 to enable new features, such as declarative databinding and smart tags.

The controls are free and open source under the LGPL license.

Installing the controls

You can install the controls in the standard way:

  • Create a » bin » folder inside the application root of your website (if it’s not already there).
  • Copy the assembly file schedule.dll (for ASP.NET 1.x) or schedule2.dll (for ASP.NET 2.0) into the bin folder.

You may want to add the controls to the toolbox of your editor (Visual Studio, Web Matrix or C# Builder). This will allow you to set their properties in the Property pane. Follow the editor’s procedure to add a control to the toolbox.

In order to support IntelliSense in HTML view in Visual Studio (and to avoid some compiler warnings):

  • Copy the schedule.xsd file to this folder.
    • VS 2003: C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\Packages\schemas\xml .
    • VS 2005: C:\Program Files\Microsoft Visual Studio 8\Common7\Packages\schemas\xml .
  • Modify the tag of any new Web Form as follows: where cc1 is the TagPrefix of the schedule control (the one assigned in the «Register» directive).

Installing the demos

I have added three sets of demo files:

  1. A set of simple demo files with inline code, that can be used with Visual Studio or Web Matrix with ASP.NET 1.x.
  2. A Visual Studio project with code-behind for ASP.NET 1.x.
  3. A Visual Web Developer 2005 (or Visual Studio 2005) project with inline code for ASP.NET 2.0.

Unzip the zip file with the demos to a subfolder of wwwroot folder. Then, either create a virtual directory for this folder in IIS, or copy the schedule.dll or schedule2.dll file to the bin folder in wwwroot .

For the demo files with inline code, that’s all you have to do. Just call the first demo page through the address http://localhost/ /demo1.aspx in your browser.

For the Visual Studio project, open Visual Studio and create a new blank solution. Right click the new solution in the Solution Explorer, choose Add — New Project From Web. enter the URL, http://localhost/ ( is the folder where you unzipped the demo files), and click OK. Select the project file when prompted. You should also create a virtual directory for the demo folder.

For the Visual Web Developer 2005 project, open Visual Web Developer and choose «Open existing Web site». Browse to the folder where the demo files are located.

Adding the controls to your page

There are two ways to add the controls to your page:

  1. Drag the control from the Toolbox onto the page (if it was installed on the Toolbox). Be careful while selecting the correct type: ScheduleCalendar for a weekly calendar schedule, ScheduleGeneral for other schedules.
  2. Add the code manually. Add this line to the top of your page:

Then, add a tag like this where you want the schedule to be displayed:

Of course, for the calendar version, you use ScheduleCalendar .

If you’re using code-behind, you should also add a reference to the Schedule instance in your page class, like this:

In the code-behind page, also add this import statement:

Setting the control’s properties

Make sure you use the appropriate settings. The DataSource property should be either a DataSet , a DataTable or a DataView . You can’t databind to a DataReader , since the control must be able to sort the data internally.

For each item on the schedule, the data source should provide a single record containing a start value, an end value, and custom data (typically a description of the task or event). For the ScheduleCalendar control when TimeFieldsContainDate= false , you also need a date value. For the ScheduleGeneral control you also need a title value (for display on column/row headers).

You need to set three properties (similar to the two properties DataTextField and DataValueField that you have to set for a bound ListBox or CheckBoxList ):

ScheduleCalendar


  • StartTimeField : the database field (column) containing the start of the event.
  • EndTimeField : the database field containing the end of the event.
  • DateField : the database field providing the dates. This field should be of type » Date » (exception: when TimeFieldsContainDate= true this field is ignored, see below). In a vertical layout, this field will be used for column titles. In a horizontal layout, it will be used for row titles.

ScheduleGeneral


  • DataRangeStartField : the database field (column) containing the start of the event.
  • DataRangeEndField : the database field containing the end of the event.
  • TitleField : the database field providing the titles. You can think of some useful fields for titles: people names, locations, classrooms, resources, etc. ) In a vertical layout, this field will be used for column titles. In a horizontal layout, it will be used for row titles.

The first two can be thought of as time fields, but in general, any type of sortable field (such as an integer) will do. Only when TimeFieldsContainDate= true for the ScheduleCalendar control, they should contain date and time information, and when FullTimeScale= True , they should contain at least time information.

Note that there is no property to indicate which field contains the «Task» or «Event» information. Actually, this information can be anything: a field, a combination of multiple fields, etc. This is possible since the «Task» data is provided through a databinding expression in the ItemTemplate . Its simplest form would be something like this for ASP.NET 1.x:

and for ASP.NET 2.0:

Optionally, you can set the ItemStyleField . When its value is not blank, the database field with this name will be used as a CSS style class for the item. This lets you set the style for each item separately from the data source.

Then, there’s the FullTimeScale property. When false (the default value), only range values occurring in the data source are shown. When true , a continuous time scale is displayed (like the Outlook calendar). For the ScheduleGeneral control, this requires the DataRangeStartField and DataRangeEndField fields in the data source to be of type Date/Time.

The image below shows the the same item (Lunch from 12:30 to 13:30) in both cases:

Lunch from 12:30 to 13:30

FullTimeScale = true and TimeScaleInterval = 15

Lunch from 12:30 to 13:30

12:45 13:00 13:15 13:30

When FullTimeScale is true , there are three additional properties that you can set:

  • TimeScaleInterval : an integer value giving the number of minutes for the interval (default=60).
  • StartOfTimeScale : a timespan value setting the start time of the time scale (default=8:00).
  • EndOfTimeScale : a timespan value setting the end time of the time scale (default=17:00). The highest value allowed here is 24:00 (midnight), which should be entered as «1.00:00» (one day, zero hours and minutes).

Two other important properties are IncludeEndValue and ShowValueMarks . When IncludeEndValue is True , the row with the end value will be included in the event. Sometimes, this will result in a more logical presentation. However, when the items are adjacent (for instance: one event ends at 10:00 AM, and another starts at the same time), it’s better to set IncludeEndValue to False . Otherwise, the items will be shown as overlapping. In this case, you can also set ShowValueMarks to True , which will add marks indicating the values, and the values will be shown in the m > False for both.

The image below shows the the same item (Lunch from 12:30 to 13:30) in all cases:

IncludeEndvalue = False and ShowValueMarks = False

Lunch from 12:30 to 13:30

13:00 13:30 14:00

IncludeEndValue = True ( ShowValueMarks is ignored)

Lunch from 12:30 to 13:30

13:00 13:30 14:00

IncludeEndValue = False and ShowValueMarks = True

Lunch from 12:30 to 13:30

13:00 13:30 14:00

Finally, you may want to add functionality for inserting new items when the user clicks on an «empty slot» in the schedule. Set the EnableEmptySlotClick property to true , and handle the OnEmptySlotClick event. Optionally, set a tooltip for empty slots with the EmptySlotTooltip property. For samples, see demo1 and demo2.

For the ScheduleCalendar control, you should set these additional properties:

  • NumberOfDays : the number of days to show at a time. The default value is 7, making it a weekly calendar.
  • NumberOfRepetitions : the number of times to repeat the number of days (the default setting is 1 repetition). This will only work in vertical layout, meaning that the NumberOfDays is shown once on top, and repeated according to the setting of NumberOfRepetitions . In horizontal layout, this value is ignored, and the number of days is shown only once.
  • StartDay : the day of the week to start the calendar. This property is only used when the NumberOfDays property is set to 7. The default value is Monday.
  • StartDate : date to start displaying events. If this date is not on the same day of the week as the StartDay property, the control will start displaying on the same day prior to the chosen date. The default value is today’s date. See the demos to learn how to set today’s date programmatically.
  • TimeFieldsContainDate : when false (the default), the DateField property is used to extract dates for each item. This means that items must start and end on the same day. If some of your items span midnight, you should set TimeFieldsContainDate to true , and you should provide a full date and time in both the StartTimeField and EndTimeField fields. In this case, the DateField property is ignored.

The ScheduleGeneral control has two additional properties:

  • AutoSortTitles : When true , the titles are sorted automatically, even when they are not sorted in the data source. When false , you may prov >DataRangeStartField first and on DataRangeEndField next. (for example: if you want to sort on a field called «SortOrder», the DataRangeStartField is the «StartTime», and the DataRangeEndField is the «EndTime», use the sorting expression » ORDER BY SortOrder ASC, StartTime ASC, EndTime ASC «) The default value for AutoSortTitles is true .
  • SeparateDateHeader : When true , an extra range of cells will be added to group all events of the same date. This requires DataRangeStartField and DataRangeEndField to be of type DateTime . The default is False .

12/9/2004 14:00 Task 1
12/9/2004 15:00
12/10/2004 14:00 Task 2
12/10/2004 15:00

12/9/2004 14:00 Task 1
15:00
12/10/2004 14:00 Task 2
15:00

For both the ScheduleCalendar and ScheduleGeneral controls, you can easily switch between a vertical or a horizontal layout with the Layout property, even at run time.

Providing template content

The next step is to add the content of the templates. You can right-click on the control to edit the templates, or you can create the templates in HTML view. Also look at the templates in the demo pages for samples.

First of all, you should provide the:

With ASP.NET 2.0, you can use:

If you want, you can combine the information from several fields in the database. You can also add controls, images, just like you can in a Repeater or a DataList control.

The other templates are for the headers. Especially in the case of time and date fields, you may want to format the content for proper display.

For the ScheduleGeneral control:


You just show the data:

Typically, you could display the range header item as a short time:

[Editor Comment: Line breaks used to avoid scrolling.]

DateHeaderTemplate (only used when SeparateDateHeader is set to true )

Typically, you could display the date header item as a short date:

[Editor Comment: Line breaks used to avoid scrolling.]

For the ScheduleCalendar control:

You could typically display the date header as a short date:

[Editor Comment: Line breaks used to avoid scrolling.]

Typically, you could display the time header item as a short time:

[Editor Comment: Line breaks used to avoid scrolling.]

In your code, don’t forget to call the DataBind() method. Without this call, nothing will be shown.

Finally, there’s the EmptyDataTemplate . Optionally, you can use this template to provide a message to be shown when no data is found in the data source. This template is not used by the ScheduleCalendar control when FullTimeScale= True .

New features in ASP.NET 2.0

The controls can now be bound to a DataSourceControl , just like you can with a GridView control. Use the smart tag menu and the «Select Data Source» wizard.

The Schedule control can also be used in Master/Detail scenarios. Typically, you can link it to a FormView or a DetailsView control, which allows for easy editing of data items. Make sure to include a primary key field in the data source for the Schedule control, and set the DataKeyNames property to the name of that primary key field.

After adding the FormView or the DetailsView control, use the «Select Data Source» wizard. Use the WHERE button to link the control to the Schedule control.

If you have projects working on a version prior to 1.5, you need to upgrade them. The Schedule class has been removed from the assembly, from now on you’ll have to use either ScheduleCalendar or ScheduleGeneral .

If your project contains a Schedule control with DisplayMode=Calendar :

  • Change the control’s type from Schedule to ScheduleCalendar (just change the type manually in the page and in the code-behind file if you use one).
  • Rename the TitleTemplate to a DateTemplate (with the same content).
  • Rename the RangeHeaderTemplate to a TimeTemplate (with the same content).
  • Rename the TitleField property to a DateField property (with the same value).
  • Rename the RangeHeaderStartField property to a StartTimeField property (with the same value).
  • Rename the RangeHeaderEndField property to an EndTimeField property (with the same value).
  • Rename the UseTitleFieldAsDate property to a TimeFieldsContainDate property (with the opposite value, change true into false and false into true ).
  • Rename the TitleStyle tag to DateStyle , or remove it when there is a DateStyle tag already.
  • Rename the RangeHeaderStyle tag to TimeStyle , or remove it when there is a TimeStyle tag already .

If your project contains a Schedule control with DisplayMode=General :

  • Change the control’s type from Schedule into ScheduleGeneral (just change the type manually in the page and in the code-behind file if you use one)
  • If some properties (such as Weeks , StartDate and UseTitleFieldAsDate ) that were not needed for DisplayMode=General were given a value, remove them.

Demo pages

Download the demo pages for samples showing you how the Schedule control could be used. In each sample, you can set the properties with the help of a form and you can add items. These samples use an Access database as the data source.

  • demo1.aspx shows a sample of a calendar. It also shows you how to delete items with a linkbutton .
  • demo2.aspx shows a sample of a task list. It also shows you how to edit and delete items with a linkbutton .
  • demo3.aspx shows a sample of a TV program schedule.
  • demo4.aspx shows a sample of a calendar with items that span midnight.

I decided to use a table for displaying all the items, instead of graphics. Graphics can put a heavy load on the server, and most importantly: a table can have child controls such as checkboxes and hyperlinks. By using templates, a developer has full control on the content of the items. I have used Microsoft’s sample code for the TemplatedList control as a starting point. I created a BaseSchedule control, which contains the code that is common for ScheduleGeneral and ScheduleCalendar .

First, all the information is extracted from the data source in order to create lists for the row and column headers. Any double values are removed, and the remainder is sorted in ascending order. Next, an empty Table web control is built, with the correct number of rows and columns. Then, the header items are added (row headers and column headers).

Finally, the scheduled items are added to the body of the table. The most difficult part is to calculate the position and span of each item, to merge the corresponding cells, and to check whether the items overlap.

For the control to work correctly on postback, the control tree needs to be rebuilt in exactly the same way (without setting any properties). To make this possible, some information has to be stored in the control’s ViewState :

  • the number of rows,
  • the number of cells in each row,
  • the number of header cells in each row,
  • the position (row and column index) of each item

In the CreateChildControls method, this information is used to build the control tree. On postback, the ViewState will be applied automatically to each child control, and their state will be restored magically. For designer support, the controls are based on Andy Smith’s SimpleTemplatedControlDesigner class.

For the ASP.NET 2.0 version, I derived from the new CompositeDataBoundControl class. I added the SelectedValue property, in order to enable master/detail scenarios with FormView and DetailsView controls. The designers are derived from the new DataBoundControlDesigner class, which eliminates the need for the SimpleTemplatedControlDesigner code.

I had a lot of trouble figuring out how to do it in ASP.NET 2.0, since a lot of documentation was missing during mid 2005.

Here are some ideas for improvement:

  • Add a DeleteCommand event.
  • Add a TodayStyle property (similar to the one in the Calendar control).
  • Provide support for right-to-left languages.
  • Add dragging support for selecting a range (Outlook style).
  • Support for recurring events.
  • Auto Format option.
  • Windows Forms version.

If anyone decides to extend this control, or has any comments, bug reports or questions, then it would be great to hear from you.

  • Templated control
  • Databound control
  • Control styles
  • Designer support
  • Property builders
  • ASP.NET 2.0 databound control
  • ASP.NET 2.0 designer action lists

All releases are fully backwards compatible, except when upgrading from a version prior to 1.5 to version 1.6 or later. For this special case, see the upgrading instructions above. In all other cases, your existing projects will not stop working.

Changes in release 2.1


  • On popular demand, I have added the OnEmptySlotClick event. To use it, set the EnableEmptySlotClick property to true , and optionally, add a value for the EmptySlotTooltip property. Handle the event in your page. See demo1 and demo2 for samples.
  • Added the documentation2.chm help file with documentation for the version for .NET 2.0.

Changes in release 2.0


  • Template editing from the smart tag menu is now working in VS2005.

Changes in release 1.9


  • Support for ASP.NET 2.0.

The controls now support declarative binding to ASP.NET 2.0 data source controls. The controls can also serve as master controls in connection with a FormView or DetailsView control. As with other ASP.NET 2.0 data controls, this enables you to create pages without writing any code. There is only one set of source files, with conditional compilation. Use build.bat to build schedule.dll for ASP.NET 1.x and build2.bat to build schedule2.dll for ASP.NET 2.0. Don’t use both assemblies in the same project. If you still want to upgrade your pages one by one, make two sets of source files with different namespaces (e.g. rw and rw2).

  • Added the SelectedValue property.
  • Added the SelectedIndexChanged event.
  • Changes in release 1.6.1


    • Added a new property NumberOfDays for the ScheduleCalendar control to allow for a number of days other than 7. The default value is still 7.
    • Since the ScheduleCalendar control is not limited to a 7 day week anymore, the Weeks property is replaced by the NumberOfRepetitions property. Setting the Weeks property will still work, but it will not show up in the property panel anymore.
    • Added a new property StartDay for the ScheduleCalendar control to allow for a starting day other than Monday. This property is ignored when the NumberOfDays is not 7. The default value is still Monday.

    Changes in release 1.6


    • A new property ShowValueMarks allows for a better display of adjacent items. See the demos and the explanation above.
    • Added the possibility to add titles to the ScheduleGeneral control with no content. This allows you to show all your titles at all times, even when they don’t have any scheduled items for the given period. In order to do this, you have to add an extra row in your data source with a DataRangeStartField value of NULL for every title that you want to show up (this solution courtesy of K. B. McHugh).
    • Added the EmptyDataTemplate property. Use this template to provide content when no rows are found in the data source (typically, this would just be a message saying something like «No data found».
    • Added a new property ItemStyleField , which is an optional database field providing the item styles (in the form of a CSS class name). If not provided, then the ItemStyle property and the AlternatingItemStyle property will be used for all items. This addition is courtesy of David Sanders.
    • Added a new property AutoSortTitles for the ScheduleGeneral control. When true (the default value), the titles are sorted alphabetically by the control according to the values in the RangeValueField (this was also the method used in previous versions). When false , the titles are not sorted by the control, and the order will be based on one of the items in the datasource. When using this option, make sure that the items with the same titles are grouped together in the datasource before databinding. If the titles are not grouped, unexpected results may occur.
    • Renamed the database folder in the demos to » App_Data » instead of » db «, in preparation for ASP.NET 2.0 folder naming conventions.

    Changes in release 1.5


    • The code now provides one base class ( BaseSchedule ) and three derived controls: ScheduleCalendar , ScheduleGeneral and Schedule (this last one is only for backwards compatibility). This will greatly simplify the setting of their properties and templates, because only the relevant properties and templates are shown for each type of control. The properties and templates are also more self-explanatory, especially for the ScheduleCalendar control.


    Upgrading issues: Currently, you can leave your existing projects as they are, because the included Schedule class provides the same functionality as before, but I plan to remove this class in the future. Therefore, I suggest that you convert your existing projects. This can be done with a few changes only. It will take you only a minute.

  • The source code is now split up in separate files for each class.
  • Added property builders for ScheduleCalendar and ScheduleGeneral .
  • Solved datasource property bug.
  • Added » » to empty cells.
  • Databinding errors will now cause a page error (same behavior as in other data controls), instead of silently being suppressed.
  • Solved bug with databinding in header.
  • Solved some minor bugs.
  • ASP на блюдечке. Часть 2

    Загрузка файлов с помощью 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). Временная одномесячная версия лежит на нашем CD-ROM.

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

    ASP E-mail 4.4 — довольно полезный компонент для работы с электронной почтой лежит на нашем CD-ROM.

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

    Веб-формы ASP.NET

    Файл веб-формы – ASPX

    Файл ASPX является отображаемым файлом веб-приложения ASP.NET. Конечный пользователь запрашивает его в своем веб-браузере для реализации функциональных возможностей веб-приложения ASP.NET. Если конечному пользователю нужно просмотреть веб-форму этого файла из IIS, необходимо выполнить запрос из веб-браузера по адресу http:// / /WebForm1.aspx , введя его в адресной строке.

    Создаваемому виртуальному каталогу по умолчанию присваивается имя проекта. Все веб-приложения ASP.NET генерируют виртуальный веб-каталог при установке в IIS. Файлы WebForm1.aspx.cs и WebForm1.aspx.resx используются для создания проектной библиотеки DLL – результата компиляции файла WebForm1.aspx . Файл aspx.cs называется кодом реализации файла ASPX, а файл ASPX – главным файлом. Файл aspx.cs содержит весь код, реализующий ASPX, а aspx.resx представляет собой файл-источник веб-формы.

    В листинге 2.1 показано представление HTML файла ASPX веб-формы ASP.NET. В нем можно изменять код HTML и сценарий javascript клиентской части, однако с помощью элементов управления веб-формы ASP.NET в представлении Design (Дизайн) вы создадите сложную веб-страницу без написания кода HTML. Представление Design (Дизайн) дизайнера веб-форм является редактором типа WYSIWIG («что вижу на экране, то и получаю при печати»), абстрагирующим разработчика от кода HTML и дающим возможность наглядного построения веб-сраниц (по аналогии со средой IDE для приложений рабочего стола в Visual Basic 6). Если вам больше нравится программировать вручную, используйте область HTML-инструментария для получения элементов HTML.

    Первая строка requestSomething.aspx определяет файл Codebehind с именем requestSomething.aspx.cs . Global.asax использует такие же правила именования файлов, что и файл requestSomething.aspx , обращаясь к файлу Global.asax .cs . Назначение файла Global.asax такое же, как в ASP – обеспечить место расположения для записи кода, доступное веб-формам рассматриваемого проекта, которое позволит разработчику фиксировать события, связанные с приложением. Например, в ASP файл Global. asa обеспечивает запуск и остановку приложения, открытие и закрытие сеанса; файл Global.asax предоставляет класс Global , наследующий System.Web.HttpApplication и содержащий функции, связанные с этими событиями. Кроме того, Global.asax предоставляет события начала и завершения запроса на ресурсы, процесса аутентификации и ошибок приложения.

    Веб-форма requestSomething.aspx содержит три элемента управления. Они добавлены из области Web Forms (Веб-формы). В дизайнере веб-форм можно добавлять элементы управления в веб-форму, как при создании приложения рабочего стола в Visual Basic или в Visual C++. Интерфейс элементов управления практически такой же.

    Разработчики создают код веб-форм так же, как они программируют классы форм в Visual Basic или Visual C++. Представление свойств элемента управления имеет формат XML и располагается в файле ASPX. Технология .NET использует XML для инициализации нужного элемента управления и создания кода HTML, возвращаемого потребителю. Инструментарий Visual Studio .NET позволяет разработчикам выбирать элементы HTML. Например, элементы DataGrid и таблица HTML реализуют отображение таблицы в веб-браузере. Элемент управления веб-формы DataGrid дает более обширное программное управление заполнением и конфигурацией таблицы по сравнению с элементом таблицы HTML. В листингах 2.2 и 2.3 показаны различия между элементом управления веб-формы DataGrid и элементами HTML. В листинге 2.2 приведен код XML, размещенный в файле ASPX и представляющий собой элемент управления DataGrid .

    В листинге 2.3 показан элемент HTML, созданный при вставке таблицы из области HTML-инструментария в веб-форму.

    В простейшей веб-форме requestSomething.aspx (см. рис. 2.4) пользователь может ввести некоторую личную информацию и нажать на кнопку Submit (Отправить). После отправки веб-формы он получает ответ в виде содержимого, введенного им в текстовом поле с именем Tell Me About Yourself And Click Submit (Расскажите о себе и нажмите на кнопку Submit [Отправить]), а также в поле You Sa >requestSomething.aspx после отправки информации на сервер.

    Файл Codebehind веб-формы – aspx.cs

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

    В веб-форме ASP.NET требуется разработка большего объема кода, но с более высоким уровнем организации. В листинге 2.4 приведен код веб-формы requestSomething.aspx в файле requestSomething.aspx.cs . Дизайнер веб-форм автоматически генерирует большую часть кода, приведенного в листинге 2.4. При открытии файла requestSomehing.aspx в представлении Design (Дизайн) и двойном щелчке на элементе управления верхнего текстового поля txtYourself дизайнер веб-форм создаст событие в файле requestSomething.aspx.cs с именем txtYourself_TextChanged . Дизайнер веб-форм откроет файл requestSomething.aspx.cs для получения функции события, созданной для элемента управления txtYourself . Несмотря на то, что дизайнер веб-форм генерирует большую часть кода в файле Codebehind , этот код при желании можно редактировать вручную.

    Обработчик события веб-формы вызывается при изменении и отправке на веб-сервер значения txtYourself в форме. После отправки формы серверу файл Codebehind веб-формы requestSomething.aspx определяет, что отправлено значение текстового поля txtYourself и вызывает функцию события txtYourself_TextChanged . В нашем примере для размещения значения, отправленного в текстовое поле txtResponse , создана единственная строка кода:

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

    Работа с консолью IIS

    Работа с консолью IIS.

    Сначала ознакомьтесь с оснасткой IIS Microsoft Management Console (MMC). Откройте IIS MMC посредством выбора команды Start\Administrative Tools\Internet Information Services (IIS) Manager. В MMC осуществляется настройка всех установленных компонентов IIS. Для настройки веб-сайтов служит папка Web Sites (Веб-узлы) в левой области консоли. При открытии этой папки в левой части окна отображается список всех веб-сайтов данного сервера, а в правой – основная информация о каждом из них (см. рис. 2.1).

    увеличить изображение
    Рис. 2.1. Веб-узлы в консоли IIS MMCКаталоги веб-сайтов

    Щелкнув на имени веб-сайта в левой части окна MMC, вы увидите, как справа появится список всех его файлов и каталогов. С консолью MMC работают так же, как и с Internet Explorer. Она позволяет получить доступ к разрешениям NTFS для каталогов, однако не дает возможность настройки разрешений NTFS для файлов. С ее помощью можно выяснить, какие файлы доступны в сконфигурированных каталогах.Идентификатор веб-сайта

    Первым сайтом в списке является Default Web Site (Веб-сайт по умолчанию). С каждым сайтом ассоциируется случайным образом сгенерированный идентификатор. Идентификатором сайта Default Web Site всегда является 1. Этот идентификатор используется в файле конфигурации метабазы для ссылки на данный сайт, с ним работают все интерфейсы программирования (например, WMI или ADSI).

    Управление службами веб-сайта

    Используемая веб-сайтами служба Windows называется World Wide Web Publishing Service. Она осуществляет управление веб-сайтами, и при ее остановке все веб-узлы будут отключены. Консоль MMC позволяет останавливать, запускать и приостанавливать работу отдельных веб-сайтов.

    Для запуска, остановки или приостановки работы сайта щелкните на имени сайта, затем с помощью кнопок на панели инструментов выберите нужное действие. Эти кнопки похожи на кнопки воспроизведения, остановки и паузы на пульте управления видеомагнитофоном или DVD-проигрывателем. Столбец State (Состояние) в правой части консоли MMC отображает текущее состояние сайта – работа, остановка или приостановка.

    • Running. Веб-сайт в данный момент работает.
    • Stopped. Веб-сайт не обслуживает клиентов и не отвечает на их запросы.
    • Paused. Веб-сайт не отвечает на новые запросы. Процессы, запущенные перед приостановкой веб-сайта, выполняются, после чего завершают свою работу. Используется, если нужно остановить веб-сайт без внезапного отключения клиентов.

    Адресация сайтов

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

    • значение заголовка узла;
    • IP-адрес;
    • номер порта (не SSL-порт; он в расчет не принимается).

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

    Создание виртуальных каталогов

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

    Создание виртуального каталога является несложной процедурой.

    1. Откройте консоль IIS MMC с помощью команды Start\Administrative Tools\Interet Information Services (IIS) Manager (Пуск\Администрирование\Диспетчер IIS).
    2. В левой части окна IIS MMC выделите веб-сайт или каталог, в котором будет создаваться виртуальный каталог.
    3. Выберите команду Action\New\Virtual Directory (Действие\Создать\Виртуальный каталог).
    4. Откроется окно Virtual Directory Creation Wizard (Мастер виртуальных каталогов). Нажмите на кнопку Next (Далее).
    5. В диалоговом окне Virtual Directory Alias (Псевдоним виртуального каталога) ведите псевдоним – имя виртуального каталога, которое будет отображаться клиентам при их работе с каталогом. Нажмите на кнопку Next (Далее).
    6. В диалоговом окне Web Site Content Directory (Каталог содержимого веб-сайта) введите путь к содержимому сайта либо перейдите к нужному каталогу. При перенаправлении на URL выберите любой путь, который в случае необходимости измените позже. Нажмите на кнопку Next (Далее).
    7. В диалоговом окне Virtual Directory Access Permissions (Разрешения доступа к виртуальному каталогу) выберите необходимый уровень разрешений: Read (Чтение), Run Scripts (Выполнение сценариев), Execute (Выполнение), Write (Запись) и Browse (Обзор). Нажмите на кнопку Next (Далее).
    8. Нажмите на кнопку Finish (Готово) для завершения работы мастера.

    Сохранение конфигурации веб-сайта в файле

    После настройки веб-сайта сохраните ее в файле метабазы XML конфигурации сайта. На базе сохраненной конфигурации вы сможете создавать аналогичные сайты на других серверах без перенастройки всех параметров. Также сохраните виртуальные каталоги, сайты FTP и пулы приложений.

    1. В консоли IIS MMC выделите сайт, который нужно сохранить.
    2. Выберите команду Action\All Tasks\Save Configuration To A File (Действие\Все задачи\Сохранить конфигурацию в файле).
    3. В диалоговом окне Save Configuration To A File (Сохранение конфигурации в файле) введите имя файла для сохранения настроек.
    4. Введите место расположения (или перейдите к существующему месту расположения с помощью кнопки Browse [Обзор]) для сохранения данной конфигурации.
    5. Укажите необходимость шифрования экспортного файла. Поскольку он является метабазой XML и содержит информацию, доступ к которой других пользователей нежелателен, рекомендуется установить шифрование.
    6. При использовании шифрования выберите пароль для защиты содержимого.
    7. Нажмите на кнопку OK.

    Создание нового сайта

    На сервере можно создать несколько сайтов, если каждый из них будет уникальным. Для создания нового сайта используйте Web Site Creation Wizard (Мастер создания веб-сайтов) или файл, сохраненный для другого веб-сайта.

    Для создания нового сайта с помощью Web Site Creation Wizard (Мастер создания веб-сайтов) выполните следующие действия.

    1. Выделите Web Sites (Веб-узлы) в левой части панели MMC.
    2. Выберите команду Action\New\Web Site (Действие\Создать\Веб-узел).
    3. В окне Web Site Creation Wizard (Мастер создания веб-сайтов) нажмите на кнопку Next (Далее).
    4. Введите описание сайта – дружественное информативное имя, несущее определенную информацию, с помощью которого сайт легко идентифицируется в консоли MMC.
    5. Введите IP-адрес, порт TCP и (необязательно) Host Header Name (Имя заголовка узла). Значение All Unassigned настроит сайт на использование любого IP-адреса, не занятого другим сайтом. На порте протокола TCP может единовременно выполняться только один сайт (All Unassigned).
    6. Нажмите на кнопку Next (Далее).
    7. Введите имя каталога для нового сайта (или перейдите к нему).
    8. Укажите, следует ли разрешить анонимный доступ к сайту. Нажмите на кнопку Next (Далее).
    9. Выберите уровень разрешений для нового сайта: Read (Чтение), Run Scripts (Выполнение сценариев), Execute (Выполнение), Write (Запись) и Browse (Обзор).
    10. Нажмите на кнопку Next (Далее), затем на кнопку Finish (Готово) для завершения работы мастера.

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

    Ниже приведены действия по созданию нового сайта с помощью файла.

    1. Выделите Web Sites (Веб-узлы) в левой части панели MMC.
    2. Выберите команду Action\New\Web Site (From File) (Действие\Создать\Веб-узел [из файла]).
    3. В диалоговом окне Import Configuration (Импорт конфигурации) введите имя файла или перейдите к нужному файлу конфигурации.
    4. Нажмите на кнопку Read File (Просмотр) для просмотра конфигурации, находящейся в файле. Ее описание появится в секции Location (Расположение) внизу окна.
    5. В секции Location выделите конфигурацию для импортирования, затем нажмите на кнопку OK.
    6. Если такой сайт уже существует, вам будет предложено либо создать новый сайт, либо заменить существующий.
    7. При создании нового сайта он получит то же самое имя и конфигурацию, но другой идентификатор.
    8. Нажмите на кнопку OK для завершения создания сайта и закрытия окна.

    Доступ ко вкладкам конфигурации

    Для получения доступа ко вкладкам свойств и настроек глобальных веб-сайтов, веб-сайтов, каталогов или файлов, отображаемых в левой части окна консоли MMC, щелкните правой кнопкой на объекте, затем выберите Properties (Свойства). В окне Properties расположены вкладки конфигурации для каждой иерархической ступени. Ниже приводится их описание. Начнем с уровня веб-сайта, так как здесь содержится больше всего вкладок, и он чаще всего используется.

    Вкладки свойств веб-сайта

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

    Вкладка Web Site (Веб-узел)

    При открытии окна Properties (Свойства) для любого веб-сайта по умолчанию отображается вкладка Web Site (Веб-узел) (см. рис. 2.2). В ней вводится адрес IP и информация о портах, а также настраивается время простоя соединения и ведение журнала. Во вкладке Web Site необходимо настроить следующие опции.

    Рис. 2.2. Вкладка Web Site (Веб-узел)

    Создание описания

    Информация, введенная в поле Description (Описание), отображается в столбце Description консоли IIS MMC. В этом поле можно определить веб-сайт, указав информативное имя. Это имя скрыто от пользователей веб-сайта.

    Настройка адреса для веб-сайта

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

    IP-адрес (IP-адрес). Позволяет установить главный IP-адрес для веб-сайта. Выберите IP-адрес в ниспадающем меню либо введите его вручную. Выбор варианта (All Unassigned) позволяет настроить веб-сайт на соответствие любому IP-адресу компьютера, не занятому другим веб-сайтом.

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

    Порт TCP (Порт TCP). Указывается номер порта, на котором сайт будет ожидать приема данных. Задайте любой порт, не используемый другой службой. Если вы укажете уже занятый порт, IIS не посчитает это ошибкой. Однако в дальнейшем вероятно возникновение проблем в работе использующей порт службы.

    Например, для веб-сайта указан порт 25, в результате чего возник конфликт со службой Simple Mail Transfer Protocol (SMTP), работающей на том же компьютере и использующей тот же порт. При поступлении к порту 25 данных компьютер не будет знать, какой службе они предназначаются. В большинстве случаев, поскольку служба SMTP устанавливается раньше, веб-запрос отправится к ней и, следовательно, не будет обработан. При выборе номера порта, отличающегося от 80, необходимо убедиться, что он не используется другой службой.

    По умолчанию веб-браузер всегда ожидает поступление данных по порту 80, если в поле адреса не указан другой порт. При изменении номера порта клиенты должны добавлять к адресу URL номер порта, чтобы браузер отправлял запросы к веб-серверу по этому порту. Например, при изменении порта ожидания данных на 1500 клиенты должны указать адрес http://www.beerbrewers.com:1500 вместо обычного http://www.beerbrewers.com.

    Порт SSL (Порт SSL). Указывается порт, по которому к веб-сайту поступают данные Secure Sockets Layer (Протокол защищенных сокетов). SSL позволяет шифровать и/или аутентифицировать данные при их передаче между клиентом и сервером (см. лекцию 10).

    Как и в предыдущем случае, при изменении стандартного номера 443 этого порта клиенты должны добавлять номер порта к адресу URL для открытия веб-сайта. Например, при изменении номера порта на 1543 клиенты для доступа к сайту должны указать адрес https://www.beerbrewers.com:1543 вместо https://www.beerbrewers.com.

    Аdvanced (Дополнительно)


    При нажатии на кнопку Advanced (Дополнительно) открывается окно Advanced Web Site Configuration (Дополнительная настройка веб-сайта), в котором настраиваются дополнительные адреса и идентификаторы. Дополнительные идентификаторы позволяют пользователям осуществлять доступ к сайту по нескольким адресам. Такой подход применяется, если нужно направить пользователей, вводящих URL одного сайта, на другой сайт этого же компьютера без использования DNS (Системы доменных имен). (Более подробная информация приведена в лекции 8). В окне Advanced Web Site Configuration указываются имена заголовков узла, чтобы нескольких веб-сайтов могли использовать один и тот же IP-адрес и порт.

    О заголовках узлов. Заголовки узлов позволяют отделять один адрес веб-сайта от другого. Обычно они служат для настройки разных веб-сайтов на использование одного и того же IP-адреса и порта. Заголовок узла представляет собой полное имя DNS, вводимое в адресной строке браузера для открытия сайта. Заголовки узлов позволяют экономить адресное пространство при наличии одного доступного IP-адреса. При запросе страницы веб-браузером HTTP 1.1 первая часть запроса выглядит следующим образом.

    Часть кода после Host является именем заголовка узла – www.mywebsite.com. IIS использует его для отправки сообщения соответствующему веб-сайту.

    Имена заголовков узлов впервые появились в протоколе HTTP 1.1, и все браузеры, совместимые с HTTP 1.1, работают с ними. Более старые версии браузеров не передают заголовок узла и для любого IP-адреса всегда выполняют переход к веб-сайту по умолчанию.

    Совет. Для поддержки старых версий браузеров можно создать стандартную страницу для IP-адреса со списком веб-сайтов и использовать элементы cookie для направления на эти сайты клиентов. Версии Internet Explorer, начиная с четвертой, и версии Netscape, начиная с 3, поддерживает заголовки узлов, поэтому не будем заострять внимание на этом вопросе. Более полная информация о поддержке старых версий браузеров находится на сайте Microsoft.

    Примечание. Имена заголовков узлов являются частью протокола HTTP 1.1, поэтому их нельзя использовать на сайтах FTP, почтовых и новостных сайтах в IIS. При создании несколько сайтов на одном сервере следует получить несколько IP-адресов или использовать различные порты. Заголовки узлов недоступны и в случае работы с протоколом защищенных сокетов (SSL), так как заголовок находится в зашифрованном запросе.

    Добавление дополнительного тождественного идентификатора. Одному и тому же веб-сайту можно присвоить несколько адресов. Сайт будет отвечать на запросы, поступающие по каждому отдельному адресу и по всем сразу. Каждый адрес, ассоциированный с веб-сайтом, называется тождественным идентификатором. Для создания дополнительного тождественного идентификатора веб-сайта нажмите на кнопку Add (Добавить) в секции Web Site Identification (Идентификация веб-сайта) во вкладке Web Site (Веб-узел). Откроется диалоговое окно Advanced Web Site Identification (Дополнительная идентификация веб-узла) (см. рис. 2.3).

    Рис. 2.3. Диалоговое окно Advanced Web Site Identification (Дополнительная идентификация веб-узла)

    Каждый тождественный идентификатор должен быть уникальным и использовать один из трех адресов (IP-адрес, порт TCP или значение заголовка узла). Введите любой правильный IP-адрес, порт или имя заголовка узла. Как и в случае с полем IP Address вкладки Web Site (Веб-узел), система не проверяет наличие этого адреса на компьютере, поэтому вводите любой разрешенный адрес. Не забывайте, что будет мало пользы, если в дальнейшем ваш сайт нельзя будет отыскать по указанному адресу.

    Удаление тождественных идентификаторов. Для удаления тождественного идентификатора выделите его и нажмите на кнопку Remove (Удалить). Все тождественные идентификаторы сайта в этом окне удалить нельзя, поэтому кнопка OK будет недоступна.

    Редактирование тождественных идентификаторов. Для изменения тождественного идентификатора выделите его и нажмите на кнопку Edit (Изменить).

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

    Добавление тождественных SSL-идентификаторов. Для добавления дополнительного идентификатора SSL веб-сайту нажмите на кнопку Add (Добавить). Можно добавить несколько идентификаторов; просто помните о том, что сертификаты SSL базируются на имени сайта, а не на IP-адресе. Любой указываемый IP-адрес должен обрабатываться через имя DNS. При попытке доступа через IP-адрес сайт будет недоступен.

    Удаление тождественных SSL-идентификаторов. Для удаления тождественного идентификатора SSL с веб-сайта выделите его и нажмите на кнопку Remove (Удалить). Нельзя удалить все тождественные SSL-идентификаторы.

    Изменение тождественных SSL-идентификаторов. Для изменения тождественного идентификатора SSL веб-сайта выделите его и нажмите на кнопку Edit (Изменить).

    Лимит времени соединения

    Параметр Connection Timeout (Лимит времени соединения) во вкладке Web Site (Веб-узел) задает промежуток времени в секундах, в течение которого сервер поддерживает для клиента открытое соединение. Как правило, браузер отправляет на сервер запрос, чтобы оставить соединение открытым. Данный процесс называется поддержкой соединения НTTP (keep-alive). Клиент использует открытое соединение для нескольких запросов, причем ни клиенту, ни серверу не нужно повторно устанавливать соединение для каждого запроса. Это сильно повышает производительность, особенно для низкоскоростных соединений. При завершении работы с запросами клиент сообщает серверу о том, что соединение можно закрыть и освободить занимаемые ресурсы.

    Предположим, по какой-то причине клиент не закрыл соединение. Оно останется открытым бесконечно долго, если не сообщить серверу о необходимости его закрытия. Значение Connection Timeout (Лимит времени соединения) предназначено как раз для установки этого интервала времени.

    Включение функции поддержки соединения HTTP

    Опция Enable HTTP Keep-Alives (Включить поддержку соединения HTTP) включена по умолчанию, что позволяет серверу принимать запросы HTTP keep-alive от клиентов. При отключении опции резко снижается производительность и клиента, и сервера.

    Включение журнала

    По умолчанию на веб-сайтах включено ведение журналов. Стандартным типом журнала является W3C Extended Log File (Расширенный файл журнала W3C). В окне можно отключить ведение журнала или изменить его тип. О ведении журналов подробно рассказывается в лекции 11.

    Вкладка Performance (Производительность)

    Во вкладке Performance (Производительность) окна Web Site Properties (Свойства веб-узла) (см. рис. 2.4) настраивается управление полосой пропускания и количество подключений сайта.

    Рис. 2.4. Вкладка Performance (Производительность)

    Управление полосой пропускания

    С помощью параметра Bandwidth Throttling (Управление полосой пропускания) настраивается максимальная пропускная способность канала связи (Кб/с). Для настройки параметра требуется программа Windows Packet Scheduler (приложение QOS – Quality Of Service), определяющая возможность отправки пакета по сети. Программа ставит данные в очередь и отправляет по сети с указанной скоростью. IIS автоматически инсталлирует Windows Packet Scheduler после задания максимального значения полосы пропускания и нажатия на кнопку OK.

    При настройке данного параметра помните, что пропускная способность канала связи локальной сети имеет значения 10, 100 или 1000 Мб/с, а скорость работы в сети интернет, как правило, намного ниже. Например, полный канал T1 обеспечивает скорость 1,544 Мб/с. Если принятое значение по умолчанию равно 1024 Кб, то оно будет намного больше скорости канала T1.

    Примечание. 1 байт равен 8 битам. 1 Килобайт равен 8192 битам.
    Подключения веб-сайта

    Переключатели Web Site Connections (Подключения веб-сайта) позволяют настроить количество подключений клиентов для данного сайта. Значение по умолчанию – Unlimited (Не ограничено). При выборе Connections Limited To (Ограничить число подключений) укажите любое количество подключений – от 0 до 2 000 000 000.

    Вкладка ISAPI Filters (фильтры ISAPI)

    Во вкладке ISAPI Filters (Фильтры ISAPI) (см. рис. 2.5) можно добавить фильтры ISAPI для сайта. Весь трафик HTTP, направляемый к сайту, будет передаваться фильтрам ISAPI в установленном здесь порядке. Расширение ISAPI применимо только к тому расширению, с которым оно связано, а фильтр ISAPI применим ко всему трафику сайта. Это может вызвать значительный спад производительности сайта, особенно при неправильном написании фильтра ISAPI, допускающем потерю ресурсов памяти. (Более подробная информация о технологии ISAPI приведена в лекции 5 курса «Программирование в IIS».)

    Рис. 2.5. Вкладка ISAPI Filters (Фильтры ISAPI)

    Фильтр ISAPI имеет определенное состояние. Направленная вниз красная стрелка означает, что фильтр в данный момент отключен. Направленная вверх зеленая стрелка означает, что фильтр включен.

    Добавление фильтра ISAPI

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

    Удаление фильтра ISAPI

    Для удаления фильтра ISAPI выделите фильтр и нажмите на кнопку Remove (Удалить).

    Изменение фильтра ISAPI

    Для изменения фильтра ISAPI выделите фильтр и нажмите на кнопку Edit (Изменить). Имейте в виду, что можно только редактировать исполняемый файл, на который указывает фильтр. Имя фильтра изменять нельзя.

    Включение и выключение фильтра ISAPI

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

    Изменение порядка выполнения

    При использовании нескольких фильтров ISAPI, как правило, они выполняются в определенном порядке. Этот порядок задается в данном окне. Для повышения приоритета фильтра в списке выделите его имя и нажмите на кнопку Move Up (Вверх). Для понижения приоритета фильтра в списке выделите его имя и нажмите на кнопку Move Down (Вниз).

    Вкладка Home Directory (Домашний каталог)

    Во вкладке Home Directory (Домашний каталог) (см. рис. 2.6) указывается место расположения данного сайта и то, как он осуществляет обработку данных.

    Указание IIS на место расположения содержимого сайта

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

    A Directory Located on This Computer (Каталог на этом компьютере). Выберите данную опцию, затем в поле Local Path (Локальный путь) задайте любой логический диск и каталог, в котором находится содержимое сайта. Кнопка Browse (Обзор) поможет перейти к нужному каталогу или вести путь в поле.

    Рис. 2.6. Вкладка Home Directory (Домашний каталог)

    A Share Located on Another Computer (Ресурс на другом компьютере). При выборе данной опции изменится текст вкладки Home Directory. Текстовое поле Local Path (Локальный путь) будет называться Network Directory (Сетевая папка), кнопка Browse (Обзор) – Connect As (Подключить как). Введите путь согласно правилам соглашения об универсальном назначении имен (Universal Naming Convention, UNC) в виде \\имя_сервера\имя_расположения. Нажмите на кнопку Connect As и задайте имя пользователя и пароль, используемые IIS для подключения к указанному месту, в диалоговом окне Network Directory Security Credentials (Мандаты безопасности сетевого каталога). Если сервер не зарегистрирован в системе, то у него нет маркера доступа к общим сетевым ресурсам. А введенное имя пользователя и пароль позволят IIS проходить аутентификацию.

    IIS может использовать имя пользователя и пароль, указываемые клиентом при аутентификации на сайте. Для этого выберите опцию Always Use The Authenticated User’s Credentials When Validating Access To The Network Directory (Всегда использовать мандаты аутентифицированного пользователя при подтверждении доступа к сетевой папке) в диалоговом окне Network Directory Security Credentials. Если пользователю не разрешен доступ к удаленному сетевому ресурсу, то он не получит доступа и к ресурсам IIS.

    Перенаправление на URL. При выборе опции появляется текстовое поле Redirect To (Перенаправлять на). Укажите в нем адрес URL, на который будут переходить клиенты при подключении к данному ресурсу. Отметьте одну из опций.

    • The Exact URL Entered Above (Точный URL, указанный выше). Перенаправляет клиента на адрес URL, указанный в поле Redirect To (Перенаправлять на). В поле должен быть указан полный и достоверный адрес URL.
    • A Directory Below URL Entered (Папка, находящаяся под указанным URL). Перенаправляет клиента в дочернюю папку под родительским каталогом, указанным клиентом в браузере. При выборе этой опции следует просто ввести имя подкаталога с префиксом в виде слеша (/).
    • A Permanent Redirection For This Resource (Постоянное перенаправление на этот ресурс). Используется при перемещении сайта с одного URL на другой. Она передает клиенту сообщение «HTTP 301 Permanent Redirect». Некоторые клиенты после получения этого сообщения автоматически обновляют свои закладки.
    Параметры домашнего каталога

    При выборе переключателей A Directory Located on This Computer (Каталог на этом компьютере) или A Share Located on Another Computer (Ресурс на другом компьютере) открывается доступ к указанным ниже опциям. Помните о том, что IIS базируется на файловых системах, поэтому при работе с разрешениями аутентифицированный (или анонимный) пользователь должен иметь соответствующие права.

    Опция Script Source Access (Доступ к исходным кодам сценариев). При включении опции клиенты получают доступ к исходному коду сценариев (Active Server Pages, ASP) при установке соответствующих разрешений на чтение/запись. Поскольку обработка сценариев происходит на серверной части, не открывайте клиенту доступ к их исходному коду и оставьте опцию отключенной.

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

    Опция Write (Запись). При включении опции клиентам с браузерами HTTP 1.1, поддерживающими функцию PUT, разрешается отгружать файлы в данный каталог.

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

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

    Опция Log Visits (Вести журнал посещений). При включении опции все посещения данного каталога записываются в журнал, если IIS ведет журнал.

    Опция Index This Resource (Индексировать этот ресурс). При включении опции каталог будет проиндексирован службой Microsoft Indexing Service (Служба индексации Microsoft), если она установлена и включена.

    Параметры приложений

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

    Application Name (Имя приложения). Задается имя создаваемого приложения. Если текстовое поле затемнено и доступна кнопка Create (Создать), это означает, что приложение еще не создано. Если доступна кнопка Remove (Удалить), то для данного каталога определено приложение, и в текстовом поле Application Name отображается его имя.

    Execute Permissions (Разрешения на выполнение). Задается тип содержимого, разрешенного на данном сайте.

    • None (Нет). Значение по умолчанию для IIS 6. Представляет собой значительное изменение в готовой конфигурации IIS. В предыдущих версиях разрешалось выполнение сценариев (таких как ASP) при стандартной установке IIS. Это вызывало проблемы, тем более что IIS устанавливался по умолчанию при инсталляции Windows, и, следовательно, Windows была настроена и на выполнение IIS, и на выполнение его сценариев. Теперь отключение сценариев в стандартной установке обеспечивает наиболее безопасную конфигурацию IIS по умолчанию.
    • Scripts Only (Только сценарии). Разрешает выполнение на сайте сценариев ASP. Опцию следует включать только при необходимости, поскольку она позволяет исполнять любые типы сценариев.
    • Scripts And Executables (Сценарии и исполняемые файлы). Разрешает выполнение на сайте сценариев и исполняемых файлов. Под категорию исполняемых файлов попадают файлы ( .exe ), динамически подсоединяемые библиотеки ( .dll ) и сценарии общего шлюзового интерфейса ( .cgi ). Опцию следует включать только при необходимости, поскольку она открывает доступ к файлам любого типа и позволяет их выполнять.

    Предупреждение. Убедитесь, что разрешения Write (Запись) NTFS и Write (Запись) IIS отключены в каталогах, для которых не установлено None (Нет) в разрешениях на выполнение.

    Application Pool (Пул приложений). Служит для указания того, в каком пуле приложений будет выполняться содержимое сайта. Этот список заполняется данными из пулов приложений, созданных в IIS MMC. Поле будет затемнено, если для домашнего каталога еще не определено приложение.

    Unload (Выгрузить)

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

    Configuration (Настройка)

    С помощью кнопки Configuration (Настройка) изменяются параметры конфигурации приложения для каталога. В появившемся окне Application Configuration (Настройка приложения) (см. рис. 2.7) можно настроить некоторые параметры взаимодействия домашнего каталога со сценариями и исполняемым содержимым.

    Рис. 2.7. Окно Application Configuration (Настройка приложения)

    В окне Application Configuration имеются следующие вкладки.

    Вкладка Mappings (Типы файлов). В ней указываются связи расширений файлов с библиотеками DLL ISAPI. По умолчанию указываются все библиотеки ASP ( .asa, .asp,.cdx, .cer ), подключатели к базам данных ( .idc ) и включения серверной части ( .shtm, .shtml, .stm ). При поступлении запроса с помощью этого списка выясняется, какой библиотеке DLL следует передать содержимое в зависимости от расширения запрашиваемого файла.

    Если включена опция Cache ISAPI Extensions, то библиотеки ISAPI DLL кэшируются в память, и IIS обрабатывает запросы для ассоциированных расширений без повторной загрузки DLL. Это повышает производительность большинства приложений ISAPI, включая ASP. По умолчанию опция включена, и настоятельно рекомендуется не выключать ее. При отключении опции IIS будет загружать ASP.DLL и создавать объекты состояния приложения и сеанса при каждом запросе страницы ASP. После обработки запроса IIS немедленно выгружает ASP.DLL. Если клиент запросит страницу ASP в процессе выгрузки приложения, то может возникнуть ошибка. Как правило, опция отключается только при тестировании кода ISAPI.DLL, когда каждый раз требуется перезагрузка

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

    1. Нажмите на кнопку Add (Добавить). Появится диалоговое окно Add/Edit Application Extension Mapping (Добавить/Изменить связь расширения с приложением).
    2. Введите имя исполняемого файла (или перейдите к нему), который будет обрабатывать содержимое.
    3. Введите имя расширения. Ставить точку перед расширением не обязательно.
    4. Укажите, следует ли передавать приложению только определенные команды HTTP или же все. Для ограничения набора команд введите разрешенные команды через запятую.
    5. Оставьте отмеченными опции Script Engine (Машина сценариев) и Verify That File Exists (Проверка существования файла), если нет оснований для их отключения. Далее мы расскажем об их назначении.

    Limiting HTTP Verbs (Ограничить команды HTTP). HTTP-клиенты используют команды для запросов на действия сервера. Эти команды (методы) определяются в спецификации W3C для HTTP. Наиболее общими являются методы GET, HEAD, POST и TRACE, хотя используются также PUT и DELETE. Рекомендуется ограничить набор команд для уменьшения уязвимости к атакам. Например, связывание с файлами ASP ограничивает набор командами GET, HEAD, POST и TRACE. При наличии ограничения приложению для обработки будут передаваться только команды, находящиеся в списке.

      • Script Engine (Машина сценариев). Опция включена по умолчанию. В этом случае IIS будет обрабатывать содержимое как сценарий, а не исполняемый файл, что исключает включение разрешений выполнения для каталога, поскольку сценарии связаны с интерпретатором.
      • Verify That File Exists (Проверка существования файла). При включенной опции IIS проверяет наличие файла сценария и право пользователя на работу с файлом перед отправкой интерпретатору. Так как каждый сценарий открывается дважды (один раз для проверки и один раз для чтения и отправки машине сценариев), то включение опции приводит к снижению производительности. В IIS 5 опция отключена по умолчанию, и, как и многие другие опции, отключена в IIS 6 в целях безопасности.
    Примечание. Даже при связывании и включении расширений ISAPI они могут не работать, если в разрешениях домашнего каталога не выбрана опция Scripts Only (Только сценарии). В этом случае для успешной обработки содержимого включите разрешение Scripts And Executables (Сценарии и исполняемые файлы).
    Для изменения связи приложения с расширением выделите расширение и нажмите на кнопку Edit (Изменить). Появится такое же окно, что и после нажатия на кнопку Add (Добавить), с идентичными опциями.
    Для удаления связи приложения с расширением выделите расширение и нажмите на кнопку Remove (Удалить), затем подтвердите удаление.


    Групповой символ используется при установке связи приложения ISAPI со всеми файловыми расширениями. Возникает вопрос, почему бы просто не применить фильтр ISAPI. Между фильтром ISAPI и связью приложения с помощью группового символа существуют некоторые различия. На уровне администрирования фильтры ISAPI применяются ко всему веб-сайту в целом, а расширения ISAPI конфигурируются для отдельных каталогов. Подкаталог наследует групповые связи с расширениями от родительского каталога, если не содержит свои собственные (в этом случае родительские связи игнорируются).
    Для добавления связи приложения нажмите на кнопку Insert (Добавить). Затем введите имя исполняемого файла (или перейдите к нему) для обработки содержимого. Опция Verify That File Exists (Проверить существование файла) действует так же, как и для связей с расширениями, и является мерой безопасности.
    Для изменения связи приложения выделите расширение и нажмите на кнопку Edit (Изменить). Появится окно Add (Добавить) с аналогичными опциями.
    Для удаления связи приложения выделите расширение и нажмите на кнопку Remove (Удалить), затем подтвердите удаление.
    Кнопки Move Up (Вверх) и Move Down (Вниз) устанавливают приоритет связи приложений ISAPI. Запросы будут передаваться через заданные связи с приложением в установленном здесь порядке.

    Вкладка Options (Параметры). Вкладка Options (см. рис. 2.8) служит для настройки конфигурации приложения, машины сценариев, определения способа поддержки сеансов.

    Опция Enable Session State (Включить состояние сеанса) настраивает ASP на создание сеанса серверной части для каждого клиентского сеанса на сервере. Такой подход применяется только для обычных сценариев ASP, так как состояние сеанса настраивается в файле web.config для приложений ASP.NET. В сеансе сохраняются данные о пользователе, переходящие на каждую посещаемую им страницу. В программе эти данные хранятся в переменных в объекте сеанса. Сеансовые переменные могут занимать значительный объем памяти, поэтому не рекомендуется использовать их в большом количестве на сайтах с высоким уровнем трафика, чтобы не снижать производительность.

    Параметр Session Timeout (Время простоя сеанса) определяет промежуток времени, в течение которого сеанс находится в состоянии бездействия перед закрытием. Укажите любое значение от 1 до 2 000 000 000 минут. Кто знает, возможно сеансовая переменная понадобится вам через 3800 лет.

    Рис. 2.8. Вкладка Options (Параметры) окна Application Configuration (Настройка приложения)

    Совет. Не торопитесь использовать состояния сеанса, если вы работаете с веб-структурой ASP или применяете рециркуляцию рабочих процессов. В веб-структуре ASP при подключении к веб-сайту пользователь может всякий раз попадать на другой сервер. Поскольку состояние сеанса создается на другом сервере (не там, где в данный момент зарегистрирован пользователь), информация о состоянии сеанса теряется. Это происходит и при рециркуляции рабочего процесса, содержащего информацию о сеансе. Вследствие этого рекомендуем вам либо отказаться от использования состояния сеанса, либо применять ASP.NET.
    Отметьте опцию Enable Buffering (Включить буферизацию) для настройки сервера на кэширование всего выходного содержимого сценария ASP перед его отправкой браузеру. Опция отправляет выходные данные единовременно, а не строка за строкой. Однако в случае обработки большого сценария нужно отобразить страницу сразу после обработки содержимого, поэтому данная опция должна быть отключена.
    Родительские пути позволяют устанавливать ссылки на каталоги с использованием относительных имен путей в коде ASP. Путь к сценарию в родительском каталогеобозначается двумя точками («..»). Это относится только к динамическому содержимому, такому как файлы включений. К статическому содержимому можно обратиться посредством относительных путей. Опция Enable Parent Paths (Включить родительские пути) отключена по умолчанию в целях безопасности, поскольку динамическое содержимое можно выполнить на этой же странице без указания структуры каталогов для перехода в нужное место.
    Примечание. В IIS 6 родительские пути отключены по умолчанию. Если в вашем коде имеются относительные пути, и этот код раньше выполнялся в IIS 5, то нужно или изменить код, или отметить опцию Enable Parent Paths (Включить родительские пути), чтобы динамическое содержимое выполнялось в IIS 6.
    Опция Default ASP Language (Язык ASP по умолчанию) определяет язык, обрабатывающий содержимое сценариев. Содержимое сценариев обозначается тегами . С IIS 6 поставляются два языка: Microsoft Visual Basic Scripting Edition (по умолчанию) и Microsoft JScript. Установите любую машину сценариев ActiveX для интерпретации содержимого на сайте.
    Опция ASP Script Timeout (Срок выполнения сценария) указывает максимальный промежуток времени для выполнения сценария. Если опция отключена, то неграмотно написанный сценарий может выполняться бесконечно долго и вызовет проблемы на сервере. По окончании заданного времени сценарий останавливается, обработанное содержимое передается браузеру с сообщением об ошибке, в котором говорится о достижении временного предела. Укажите любой интервал от 1 до 2 000 000 000 с (это 63 года!).
    Опция Enable S >Вкладка Debugging (Отладка). Вкладка Debugging окна Application Configuration (Настройка приложения) (см. рис. 2.9) помогает в решении проблем при тестировании кода сценариев ASP. При включении опции IIS использует Microsoft Script Debugger (Отладчик сценариев Microsoft) для проверки кода. IIS настраивается на отладку сценариев как серверной, так и клиентской частей. Включение сценариев серверной части отрицательно сказывается на производительности, поэтому пользуйтесь этим только при необходимости. Можно настроить сообщение, передаваемое клиентам при возникновении ошибки в сценарии.

    Рис. 2.9. Вкладка Debugging (Отладка)

    • Enable ASP Server-Side Script Debugging (Включить отладку сценариев серверной части). Включение опции настроит IIS на использование отладчика сценариев для проверки кода в процессе обработки.
    • Enable ASP Client-Side Script Debugging (Включить отладку сценариев клиентской части). Включение опции разрешит отладку ASP-страниц с помощью Microsoft ScriptDebugger на клиентской части. При возникновении ошибки клиент получит сообщение с вопросом о том, нужно ли провести отладку ошибки.
    • Send Detailed ASP Error Messages to Client (Отправлять клиенту подробные сообщения об ошибках). Являясь опцией по умолчанию, обеспечивает отправку стандартного сообщения об ошибке с именем файла и относительным путем, особого сообщения об ошибке и номера строки, в которой произошла ошибка. Это дает клиентам доступ к подробной информации о настройках сайта, поэтому в целях безопасности имеет смысл отправлять другие сообщения об ошибках.
    • Send the Following Text Error Message to Client (Отправлять клиенту следующее текстовое сообщение об ошибке). Отметьте эту опцию и введите текст собственного сообщения, отправляемого клиенту при возникновении ошибки в сценарии ASP. Например, введите сообщение с указанием адреса электронной почты, по которому клиент сможет отправить отчет об ошибке.
    Создание компоновки соседних версий

    Создадим файл-манифест, позволяющий приложению использовать более старую версию библиотеки DLL. Он является ключевым объектом при компоновке соседних версий, поэтому с него и начинаем. В нем содержится информация для IIS о том, какой графический пользовательский интерфейс использовать для загружаемого COM-объекта. Назовем наш файл Myapp.xml ; его нужно разместить в каждом виртуальном каталоге, использующем данную библиотеку DLL.

    Теперь нужно дать IIS команду на использование компоновки соседних версий. Во вкладке Options (Параметры) отметьте опцию Enable Side By Side Assemblies (Включить параллельные сборки). После этого введите Myapp.xml в поле Manifest File Name (Имя файла-манифеста). Наш файл-манифест находится в этом же каталоге, поэтому указывается только имя файла.

    Вкладка Documents (Документы)

    В окне Web Site Properties (Свойства веб-узла) имеется еще одна вкладка – Documents (Документы) (см. рис. 2.10). В ней настраиваются стандартные страницы веб-сайта, а также нижний колонтитул, размещаемый на каждой странице.

    Рис. 2.10. Вкладка Documents (Документы)

    Enable Default Content Page (Включить страницу с содержимым по умолчанию)

    Эта опция указывает страницу по умолчанию, которая отображается в том случае, если в строке адреса URL запроса не указано имя документа. Например, при вводе клиентом адреса http://www.microsoft.com веб-сервер IIS проверяет наличие документа по умолчанию. При включенной опции этот документ отображается. Такой подход не требует от клиента указания имени документа для каждого посещаемого сайта. Если документ по умолчанию не определен, и клиент не указал имя документа, то дальнейшее развитие событий зависит от того, включен или выключен просмотр каталогов.

    • Просмотр каталогов включен. Сервер отправляет список содержимого каталога.
    • Просмотр каталогов отключен. Сервер отправляет сообщение об ошибке: «Просмотр содержимого данного виртуального каталога запрещен».
    Добавление и удаление страниц с содержимым по умолчанию

    IIS производит поиск имен заданных страниц, если в запросе не определена конкретная страница. Имя файла должно полностью соответствовать имени страницы, поэтому не забудьте указать расширение, причем сделайте это правильно ( Default.htm не то же самое, что Default.html ). Для добавления в список имени файла нажмите на кнопку Add (Добавить) и введите имя страницы. Для удаления имени файла из списка выделите его и нажмите на кнопку Remove (Удалить). Подтверждение на удаление не запрашивается.

    Установка порядка страниц по умолчанию

    При поиске страницы по умолчанию IIS проверяет список в порядке, установленном в данном окне. IIS использует первую страницу, имя которой соответствует критерию поиска. Для изменения порядка элементов списка выделите имя страницы и с помощью кнопок Move Up (Вверх) и Move Down (Вниз) переместите ее в нужное место.

    Enable Document Footer (Включить нижний колонтитул документа)

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

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

    Вкладка Directory Security (Безопасность каталога)

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

    Рис. 2.11. Вкладка Directory Security (Безопасность каталога)

    Изменение параметров аутентификации и контроля доступа

    В этой секции выбирается тип аутентификации сайта для обеспечения его безопасности. Не забывайте о взаимодействии между защитой NTFS и мерами безопасности IIS, об их воздействии на пользователей, проходящих процедуру аутентификации на веб-странице. Для изменения параметра Authentication and Access Control (Аутентификация и контроль доступа) нажмите на кнопку Edit (Изменить). Откроется диалоговое окно Authentication Methods (Методы аутентификации) (см. рис. 2.12).

    Рис. 2.12. Диалоговое окно Authentication Methods (Методы аутентификации)

    Опция Enable Anonymous Access (Включить анонимный доступ). При включении опции пользователи подключаются к веб-странице без ввода аутентификационных данных. Вконтексте безопасности используется учетная запись Guest (Гость) – гостевая учетная запись интернета. Она создается при установке IIS и ей присваивается имяIUSR_ . Опция позволяет настроить меры безопасности для всех анонимных пользователей, посещающих сайт с помощью этой учетной записи. Можно отказаться от гостевой учетной записи интернета, а вместо нее использовать другую учетную запись (локальную или расположенную на доверенном домене).

    Совет. Любая учетная запись, используемая для доступа к веб-страницам, должна иметь разрешение на доступ к файлам на уровне NTFS. Более подробная информация об установке этих разрешений приведена в лекции 6.

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

    1. Введите имя учетной записи в диалоговом окне Authentication Methods (Методы аутентификации). Для учетной записи домена используйте формат имени имя_домена\имя_пользователя.
    2. Для поиска нужного имени нажмите на кнопку Browse (Обзор). Появится стандартное окно выбора объекта Windows 2003.
    3. В этом окне выберите имя учетной записи пользователя и ее место расположения. Поиск можно произвести нажатием на кнопку Advanced (Дополнительно).
    4. После выбора учетной записи нажмите на кнопку OK.
    5. Введите пароль учетной записи в текстовом поле Password (Пароль). После нажатия на кнопку OK появится окно подтверждения пароля.

    При указании имени пользователя и пароля IIS не проверяет правильность этой информации. Если данные введены неправильно, IIS будет работать с отключенным анонимным доступом к сайту. Обнаружить это довольно сложно, так как Internet Explorer автоматически будет использовать другие методы аутентификации, например, входные данные зарегистрированного в системе пользователя. Как администратор вы получите доступ к ресурсам, а вот как пользователь-гость – нет. Выяснить аутентифицируемого в данный момент пользователя можно при помощи файла журнала сайта, в котором фиксируется этот процесс. При использовании учетной записи, не имеющей доступа к указанному ресурсу, появится окно для ввода аутентификационных данных.

    Аутентифицированный доступ. Секция Authenticated Access окна Authentication Methods (Методы аутентификации) отображает типы аутентификации, включенные на сайте. Если гостевая учетная запись IIS не имеет доступа к ресурсу, IIS проверяет доступные типы аутентификации.

      Интегрированная аутентификация Windows. Наиболее безопасный способ аутентификации, прекрасно подходит для любых версий браузера Internet Explorer в отсутствие HTTP-proxy. Он встраивается во все браузеры IE, начиная с версии 2.0. Браузеры типа Netscape не поддерживают данный метод аутентификации. Интегрированная аутентификация Windows использует на сервере принцип NT запрос/ответ или протокол Kerberos. При поддержке клиентом и сервером Kerberos и в случае доступности доверенного центра распространения ключей Key Distribution Center (KDC) используется протокол Kerberos; в противном случае – принцип NT запрос/ответ.

    Аналитическая аутентификация для серверов доменов Windows. Аналитическая аутентификация доступна при использовании учетных записей Active Directory. Данный метод, хотя и связан с некоторыми опасностями, все же более безопасен, чем базовая аутентификация. Наряду с Active Directory требуется также наличие протокола HTTP 1.1, поэтому аналитическая аутентификация работает только с новыми версиями браузеров, поддерживающими этот протокол. Нужно также, чтобы контроллер домена содержал открытую копию каждого пароля для проверки паролей на наличие случайной информации, отправляемой клиентом. В этом и заключается угроза безопасности. Сохранение паролей в открытом виде на диске представляет собой очевидный риск, поэтому убедитесь, что контроллер домена надежно защищен от вторжений, в противном случае злоумышленник может выяснить необходимые ему пароли. Преимуществом аналитической аутентификации является то, что пароль не передается через сеть в открытом виде, как в базовой аутентификации.

    Аналитическая аутентификация представляет собой простой хэш и поэтому работает через сетевые экраны и прокси-серверы. Она доступна и для каталогов Web-based Distributed Authoring and Versioning (WebDAV). Поскольку для аналитической аутентификации нужен домен, при ее выборе становится доступным поле Realm (Область). Если аналитическая (или базовая) аутентификация не включена, поле Realm (Область) недоступно. В этом поле указывается база данных учетных записей пользователей, используемая при аутентификации. Введите в поле имя области с клавиатуры или с помощью кнопки Select (Выбор) выберите нужное имя из списка областей.

    Ограничение доступа по IP-адресу или имени домена

    IIS позволяет ограничить доступ к сайту пользователей без указания имени пользователя и пароля. С помощью ограничения по IP-адресам указывается конкретная группа пользователей, которой предоставляется или запрещается доступ к сайту. Это используется в следующих случаях.

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

    Если вы решили ограничить доступ по IP-адресам, то эти ограничения необходимо настроить. Нажмите на кнопку Edit (Изменить) в области IP Address And Domain Name Restrictions (Ограничения по IP-адресу и доменному имени) во вкладке Directory Security (Безопасность каталога). После нажатия на кнопку Edit (Изменить) откроется диалоговое окно IP Address And Domain Name Restrictions (Ограничения по IP-адресу и доменному имени) (см. рис. 2.13). Необходимо выбрать способ установки ограничения: запретить доступ всем пользователям, кроме отдельных конкретных лиц, либо разрешить доступ всем и наложить запрет на доступ к сайту определенным пользователям. При выборе опции Granted Access (Открыть доступ) подход к ограничению будет лояльным; при выборе опции Denied Access (Запретить доступ) претворится в жизнь принцип «запретить доступ всем, за некоторым исключением».

    Рис. 2.13. Диалоговое окно IP Address And Domain Name Restrictions (Ограничения по IP-адресу и доменному имени)

    Изменение ограничений по IP-адресу. Для добавления в список IP-адреса нажмите на кнопку Add (Добавить). Появится окно Grant Access (Предоставить доступ) или Deny Access (Запретить доступ) в зависимости от того, какая опция выбрана.

    Выбор предоставления или запрета доступа является глобальным решением. Нельзя отказать в доступе некоторым IP-адресам и разрешить доступ другим. Здесь нужно действовать по принципу «все или ничего». Выберите необходимый тип доступа.

    • Один компьютер. Позволяет ввести IP-адрес в список доступа. Таким способом можно последовательно указать несколько компьютеров. Если IP-адрес компьютера неизвестен, нажмите на кнопку DNS Lookup (Поиск по DNS) для определения IP-адреса по имени.
    • Группа компьютеров. Позволяет ввести идентификатор сети и маску подсети для добавления компьютеров в список. С помощью масок подсети переменной длины можно довольно точно определить IP-адреса в списке.
    • Доменное имя. Позволяет ввести имя домена для запрета с него доступа к сайту. Будьте внимательны при использовании этой опции, так как при ее работе выполняется обратный поиск по отношению к каждому клиенту, подключающемуся к серверу, и выяснение того, не является ли он членом запретного домена. Это отрицательно сказывается на производительности и вызывает задержки при аутентификации клиентов. Операции обратного поиска, как правило, требуют большого количества времени для выполнения.

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

    Для удаления выделите запись и нажмите на кнопку Remove (Удалить). Для изменения выделите запись и нажмите на кнопку Edit (Изменить).

    Безопасность соединения

    Область Secure Communications (Безопасность соединения) во вкладке Directory Security (Безопасность каталога) служит для настройки сертификатов при аутентификации и шифровании. Она позволяет создать запросы сертификатов, присваивать, экспортировать, импортировать и резервировать сертификаты, настроить взаимодействие сервера с сертификатами клиентов.

    Для настройки сертификата на данном сервере нажмите на кнопку Server Certificate (Сертификат сервера). Отобразится окно Web Server Certificate Wizard (Мастер сертификатов веб-сервера). Нажмите на кнопку Next (Далее) для изменения параметров присвоения сертификата.

    Create A New Certificate (Создать новый сертификат). Позволяет настроить запрос для отправки в бюро сертификатов (CA) (см. лекцию 10). Запрос направляется либо в онлайновое бюро сертификатов, либо сохраняется в файле, и затем файл направляется в бюро сертификатов через процедуру регистрации. Для отправки запроса онлайновому бюро сертификатов установите на сервере Certificate Services (Службы сертификатов).

    Совет. Корпоративные бюро сертификатов (CA) располагаются в Active Directory и имеют записи SRV в DNS, поэтому вы сможете их найти. Более подробная информация о записях SRV и DNS приведена в лекции 8. При наличии отдельного бюро сертификатов, установленного на данном компьютере, IIS не сможет его распознать. Но это не такая большая проблема, поскольку можно вручную утвердить и установить сертификат (см. лекцию 7 курса «Программирование в IIS»). Рекомендуем вам расположить CA в защищенном месте; уязвимый веб-сервер для этой цели не подходит.

    При создании запроса для отправки в бюро сертификатов выполните следующие шаги.

    1. Выберите опцию Create A New Certificate (Создать новый сертификат), затем нажмите на кнопку Next.
    2. Выберите опцию Prepare The Request Now, But Send It Later (Подготовить запрос сейчас, но отправить его позже), затем нажмите на кнопку Next
    3. Введите желаемое имя для сертификата – можете указать любое имя.
    4. Укажите длину сертификата в битах. Можете выбрать значение 512, 1024, 2048, 4096, 8192 или 16384 бита для создания сложного хэша.
    5. Если требуется выбрать поставщика криптографических услуг (CSP) для генерирования данного сертификата, отметьте соответствующую опцию. CSP представляет собой алгоритм, используемый для генерирования сертификатов.
    6. Введите имя вашей организации и укажите подразделение организации. Помните, что при использовании услуг коммерческого бюро сертификатов нужно указать ваше официальное деловое имя. Нажмите на кнопку Next.
    7. Введите общее имя сайта. Оно должно соответствовать имени DNS или NetBIOS, используемому для сайта. Поскольку каждый сертификат соответствует определенному имени, он пригоден только для одного имени. При использовании другого имени DNS или NetBIOS нужно получать новый сертификат. Нажмите на кнопку Next.
    8. Введите данные в полях City (Город), State (Штат) и Country (Страна). Не допускайте сокращений. Нажмите на кнопку Next.
    9. Введите имя и место расположения файла для размещения запроса. Помните об этом файле, поскольку он будет использоваться в запросе на сертификат. Нажмите на кнопку Next.
    10. Следующее окно представляет собой окно отчета. Убедитесь в правильности введенной информации. Нажмите на кнопку Next.
    11. Нажмите на кнопку Finish (Готово) для завершения работы мастера.

    Copy Or Move A Certificate From A Remote Server Site To This Site (Копировать или переместить сертификат с удаленного сервера на этот сайт). Возможно получение сертификатов с другого веб-сайта. Данная опция не позволяет выполнить экспортирование сертификата в файл, представляющее собой угрозу безопасности. Для копирования или перемещения сертификата с удаленного веб-сервера выполните следующие действия.

    1. В окне IIS Certificate Wizard (Мастер сертификатов IIS) выберите опцию Copy Or Move A Certificate From A Remote Server Site To This Site (Копировать или переместить сертификат с удаленного сервера на данный сайт), затем нажмите на кнопку Next (Далее).
    2. В диалоговом окне Copy/Move Certificate (Копировать/Переместить сертификат) выберите нужное действие.
    3. Укажите, нужно ли экспортировать сертификат с данного веб-сайта. Нажмите на кнопку Next.
    4. Введите имя компьютера (или перейдите к нему), с которого импортируется сертификат.
    5. Введите аутентификационные данные пользователя, имеющего достаточные разрешения для доступа к сертификату, затем нажмите на кнопку Next.
    6. Укажите расположение сайта, из которого импортируется сертификат. С помощью кнопки Browse (Обзор) выберите это место из списка. Нажмите на кнопку Next.
    7. Проверьте данные в результирующем окне и убедитесь, что импортирован правильный сертификат.
    8. Нажмите на кнопку Next, затем нажмите на кнопку Finish (Готово).

    Обработка сертификата. После получения ответа от бюро сертификатов обработайте ожидающий подтверждения запрос на сертификат. Для этого выполните следующие действия.

    1. Запустите Web Server Certificate Wizard (Мастер сертификатов веб-сервера) еще раз, нажав на кнопку Server Certificate (Сертификат сервера) во вкладке Directory Security (Безопасность каталога).
    2. В диалоговом окне Server Certificate (Сертификат сервера) выберите опцию Process The Pending Request (Обработать ожидающий сертификат) и установите сертификат. Нажмите на кнопку Next.
    3. Введите имя файла ответа (или перейдите к его месту расположения), полученного от бюро сертификатов, затем нажмите на кнопку Next.
    4. Введите номер порта SSL, который будет использоваться сайтом. Нажмите на кнопку Next.
    5. Просмотрите окно с отчетом и убедитесь в правильности указанной информации.
    6. Нажмите на кнопку Next, затем нажмите на кнопку Finish (Готово).

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


    1. В окне Web Server Certificate Wizard (Мастер сертификатов веб-сервера) выберите опцию Delete The Pending Request (Удалить ожидающий запрос). В следующем диалоговом окне появится сообщение о том, что при продолжении работы мастера станет невозможной обработка ответов на этот запрос, а также предложение отказаться от продолжения.
    2. Нажмите на кнопку Next (Далее) для удаления запроса.
    3. Нажмите на кнопку Finish (Готово) для завершения работы мастера.

    Просмотр деталей установленного сертификата. При наличии установленного сертификата просмотрите информацию о нем, нажав на кнопку View Certificate (Просмотр сертификата) во вкладке Directory Security (Безопасность каталога).

    • Вкладка General (Общие). Содержит информацию о сертификате: назначение сертификата, выпустившее его лицо, заказчик сертификата, срок действия сертификата.
    • Вкладка Details (Детали). Содержит очень важные сведения о сертификате. В ней можно просмотреть все свойства сертификата, запустить Certificate Export Wizard (Мастер экспорта сертификатов), включить и отключить цели данного сертификата и указать несколько мест для загрузки из различных бюро сертификатов.
    • Вкладка Certification Path (Путь сертификата). Позволяет просмотреть иерархию сертификатов CA для данного сертификата. Отображает данные о том, является ли сертификат действительным.

    Изменение безопасных соединений. С помощью кнопки Edit (Изменить) можно изменить связи сертификата и списки доверия (см. рис. 2.14). Возможна настройка принудительного использования SSL.

    Рис. 2.14. Окно Secure Communications (Безопасность соединений)

    Опция Require Secure Channel (Требовать безопасный канал) обеспечивает принудительное использование SSL на сайте. Любому браузеру, который не использует протокол SSL, доступ к сайту будет запрещен.

    Опция Require 128-Bit Encryption (Требовать 128-битное шифрование) позволяет в принудительном порядке использовать мощное шифрование. Это позволяет предотвратить доступ к сайту браузеров с более слабым шифрованием. На сайте Microsoft доступны обновления для Internet Explorer, реализующие 128-битное шифрование (http://www.microsoft.com/ie). Их может загрузить любой пользователь страны, не входящей в ряд государств, на которые США наложило информационное эмбарго (так как Microsoft является государственной корпорацией США).

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

    • Ignore (Игнорировать). Опция по умолчанию. Любой представленный сертификат клиента не принимается.
    • Accept (Принять). Принимает сертификат. Позволяет настроить связи сертификатов, что не является обязательным. Любой браузер без сертификата клиента получит доступ к сайту.
    • Require (Требовать). Требует использование сертификатов. Любому клиенту без сертификата доступ к сайту запрещен. Для выбора этой опции нужно также отметить опцию Require Secure Channel (Требовать безопасный канал).

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

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

    Вкладка HTTP Headers (Заголовки HTTP)

    Во вкладке HTTP Headers (Заголовки HTTP) окна Properties (Свойства) (см. рис. 2.15) настраивается срок действия содержимого, оценка содержимого и типы MIME, добавляются заголовки HTTP.

    Рис. 2.15. Вкладка HTTP Headers (Заголовки HTTP)

    Установка срока действия содержимого

    Опция устанавливает срок действия файлов на веб-сайте и используется для остановки кэширования содержимого по истечении установленного срока. Срок действия при запросе передается вместе с содержимым. Используется объект RESPONSE со свойством CACHECONTROL или EXPIRES для установки срока кэширования и периода действия на страницах ASP, однако при работе с графикой он не работает. Опция выполняет указанные функции с помощью следующих параметров.

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

    Expire After (Истечение срока действия после). Устанавливает промежуток времени в минутах, часах или днях. Указывается любое значение в интервале от 1 минуты до 32 767 дней (это всего лишь 90 лет).

    Expire On (Истечение срока действия в). Устанавливает срок завершения действия содержимого в определенное время. Нельзя указывать дату окончания действия более раннюю, чем текущая дата. Указывается любая дата, вплоть до 31 декабря 2035 года. Поскольку эта дата обрабатывается клиентом, она контролируется его временной зоной, поэтому возможны некоторые отклонения в сроках завершения действия содержимого в зависимости от зоны.

    Особые заголовки HTTP

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

    Для добавления особого заголовка выполните следующие действия.

    1. Нажмите на кнопку Add (Добавить). Появится диалоговое окно Add/Edit Custom HTTP Header (Добавить/Изменить особый заголовок HTTP).
    2. Введите имя особого заголовка в соответствующем поле.
    3. Введите значение особого заголовка в соответствующем поле.
    4. Нажмите на кнопку OK.

    Заголовок изменяется посредством кнопки Edit (Изменить) и удаляется с помощью кнопки Delete (Remove). При удалении особого заголовка подтверждение удаления не запрашивается.

    Оценка содержимого

    Существует возможность оценки содержимого сайта. Это добровольная система, разработанная Ассоциацией оценки содержимого интернета (Internet Content Rating Association, ICRA). ICRA представляет собой некоммерческую, независимую организацию, которая дает родителям возможность принимать объективное решение о том, что их дети могут просматривать в интернете. Данная система состоит из двух частей: сначала сайт оценивается веб-мастером (ICRA не производит оценку), затем конечный пользователь устанавливает параметры браузера для блокировки определенных сайтов по их содержимому.

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

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

    Включение оценки содержимого сайта. Выполните следующие действия.

    1. Откройте диалоговое окно Content Ratings (Оценка содержимого), нажав на кнопку Edit Ratings (Изменить оценку) во вкладке HTTP Headers (Заголовки HTTP).
    2. В окне Content Ratings отметьте опцию Enable Ratings For This Content (Включить оценку данного содержимого).
    3. Выберите ту оценку, которую нужно установить.
    4. Используйте ползунок для установки уровня от 0 до 4.
    5. Установите одну оценки или все вместе (при необходимости).
    6. Введите адрес электронной почты в соответствующем поле. Как правило, здесь указывается адрес, отражающий характерную учетную запись (например,webmaster@thisdomain.com ).
    7. Укажите срок действия. Дата должна быть больше текущей. Укажите любую дату до 31 декабря 2035 года.
    8. Нажмите на кнопку OK.
    Типы MIME

    Многоцелевые расширения почты интернета (MIME) определяют типы файлов, работу клиентов с которыми обслуживает IIS. IIS 6 обслуживает только файлы, связанные со сценариями или соответствующие определенному типу MIME. При обнаружении IIS расширения, для которого отсутствует связь MIME, клиент получает ошибку 404 «Not Found», и сервер фиксирует код подсостояния, равный трем.

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

    Типы MIME настраиваются на глобальном уровне, на уровне веб-сайта или каталога, причем наследуются в порядке уменьшения уровней. Рассмотрим пример добавления связи MIME.

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

    1. Нажмите на кнопку MIME Types (Типы MIME) во вкладке HTTP Headers (Заголовки HTTP) на нужном уровне (глобальном, для сайта или каталога, в зависимости от выбранного параметра в MMC).
    2. Нажмите на кнопку New (Создать).
    3. В диалоговом окне MIME Type (Тип MIME) введите расширение файла в поле Extension (Расширение). В данном случае укажите расширение .log.
    4. Введите тип MIME в соответствующем поле. Поскольку файл имеет формат обычного текста, подходящим типом MIME будет text/plain.
    5. Нажмите на кнопку OK. Новое расширение добавится в список.
    6. Нажмите на кнопку OK, затем еще раз.

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

    При неправильной настройке типа MIME IIS будет обслуживать файл, однако система не будет знать, какие действия выполнять с файлом. Пользователям IE придется выбирать программу для открытия данного файла из предлагаемого списка.

    Примечание. Как выяснить соответствие типа MIME рассматриваемому файлу? Документы RFC2045 и RFC2046 определяют поля для типов MIME, а также порядок присвоения и просмотра типов агентством IANA (Агентство по выделению имен и уникальных параметров протоколов интернета). Это та же самая организация, которая назначает IP-адреса. Полный перечень типов расположен на сайте организации по адресу http://www.iana.org.

    Вкладка Custom Errors (Особые ошибки)

    Вкладка Custom Errors (Особые ошибки) (см. рис. 2.16) служит для изменения стандартных сообщений об ошибках, отправляемых IIS. В ней отображается связь каждой ошибки HTTP с кодом подсостояния. Во вкладке можно создать особые сообщения об ошибках и задать сценарии, выполняющиеся при возникновении ошибок.

    Рис. 2.16. Вкладка Custom Errors (Особые ошибки)

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

    Для выбора доступны три типа сообщений.

    • Default (По умолчанию). Ошибка по умолчанию, запрограммированная в IIS. Позволяет восстановить исходное состояние, если особая ошибка больше не нужна.
    • File (Файл). Позволяет выбрать файл, используя его полное имя (например, C:\windows\help\errors\iiserror404.asp ).
    • URL. Позволяет направить клиента на страницу сайта по абсолютному пути URL (начиная с верхнего уровня сайта). Следовательно, страницы ошибок HTTP должны находиться на том же сайте, хотя они и могут располагаться в виртуальном каталоге. При вводе URL в неправильном формате отобразится сообщение об ошибке.
    Изменение свойств особых ошибок

    Для изменения свойств особых ошибок выполните следующие действия.

    1. Выделите ошибку HTTP, затем нажмите на кнопку Edit (Изменить). Появится окно Edit Custom Error Properties (Изменение свойств особой ошибки).
    2. В ниспадающем меню выберите тип сообщения для данной ошибки.
    3. При использовании файла укажите путь к этому файлу или перейдите в его место расположения.
    4. При использовании URL введите абсолютное имя файла.
    5. При выборе опции Default (По умолчанию) ничего указывать не нужно.
    6. После выбора и настройки опции нажмите на кнопку OK.
    7. Нажмите на кнопку OK.

    Некоторые сообщения об ошибках нельзя связать с URL

    Некоторые сообщения об ошибках нельзя связать с URL. Ниже приведен список таких сообщений.

    • 401.1 Unauthorized: Access is denied due to invalid credentials (Доступ запрещен по причине неверного имени пользователя и пароля).
    • 401.2 Unauthorized: Access is denied due to server configuration favoring an alternate authentication method (Доступ запрещен по причине того, что в конфигурации сервера указан другой метод аутентификации).
    • 401.3 Unauthorized: Access is denied due to an ACL set on the requested resource (Доступ запрещен по той причине, что на запрашиваемом ресурсе расположен список ACL).
    • 401.4 Unauthorized: Authorization failed by a filter installed on the web server (Авторизация не проведена из-за фильтра, установленного на веб-сервере).
    • 401.5 Unauthorized: Authorization failed by an ISAPI/CGI application (Авторизация отменена приложением ISAPI/CGI).
    • 407: Proxy Authentication Required (Требуется аутентификация прокси).
    • 502: Bad Gateway (Ошибка шлюза).

    Вкладка BITS Server Extension (Серверное расширение BITS)

    Служба интеллектуальной фоновой передачи (Background Intelligent Transfer Service, BITS) позволяет осуществлять медленную передачу большого количества информации в течение длительного времени. Передача данных выполняется в то время, когда сеть не используется, что не сказывается на производительности сети. Вкладка BITS Server Extension (Серверное расширение BITS) доступна, если установлен соответствующий компонент. (Опция установки компонента находится в папке Add/Remove Windows Components [Установка и удаление компонентов Windows]. Дополнительную информацию см. в лекции 1.) IIS использует серверные расширения BITS для получения отгружаемых клиентами в виртуальный каталог файлов. Клиент должен иметь программное обеспечение, позволяющее отгружать файлы при помощи технологии BITS; IIS лишь настраивает сервер на прием файлов, передаваемых посредством BITS. При инициализации передачи BITS управляет ею до тех пор, пока существует сетевое подключение. Если сетевое соединение прерывается, BITS приостанавливает передачу и возобновляет ее с места приостановки после восстановления соединения. Данные передаются независимо от отключений и перезагрузки компьютеров. BITS отслеживает использование сети на компьютере-клиенте и осуществляет передачу при наличии достаточной части полосы пропускания канала.

    Рис. 2.17. Вкладка BITS Server Extensions (Серверные расширения BITS)

    Allow Clients to Transfer Data to This Virtual Directory (Разрешить клиентам передавать данные в этот виртуальный каталог)

    Опция настраивает виртуальный каталог на прием файлов, передаваемых через BITS. При выборе опции Use Default Settings (Использовать настройки по умолчанию) в данной вкладке нельзя настроить какие-либо опции. Опция Customize Settings (Изменить настройки) позволяет внести изменения в параметры. Параметры устанавливаются на уровне веб-сайта в виртуальных каталогах, предназначенных для приема данных посредством технологии BITS. Виртуальный подкаталог наследует параметры родительского виртуального каталога.

    Особые настройки

    В области Custom Settings (Особые настройки) настраивается максимальный размер файла, передаваемого с помощью BITS, с помощью опции Maximum File Size (Максимальный размер файла). Подразумевается максимальный размер одного файла. Укажите значение от 1 байта до 16 777 215 терабайт. (Искренне желаю вам дожить до момента выпуска новых ПЗУ объемом 16 экзабайт.) Настраивается период действия незавершенных передач файлов до их удаления процессом очистки. Выберите любой интервал времени от 1 с (в этом случае любая незавершенная передача удаляется при запуске очистки диска) до 49 710 дней, по прошествии которых жесткие диски объемом 16 экзабайт будут уже давно пройденным этапом.

    Включение поддержки набора серверов

    Набор серверов BITS представляет собой группу серверов, на которые клиент может отгружать файлы. Хранилище файлов настраивается на работу с набором серверов двумя способами.

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

    При выборе второй опции откроется доступ к опциям поддержки набора серверов.

    • Reconnect To IP Address (Повторное подключение к IP-адресу). Позволяет клиенту узнать IP-адрес для повторного подключения при возобновлении передачи файлов. При использовании серверами локального хранилища клиенту, скорее всего, потребуется повторное подключение к тому же серверу для продолжения передачи файла, а не создание нового подключения к другому серверу. Здесь можно указывать имя DNS, если для этого имени присутствует одна запись A (циклический DNS направит клиента на несколько серверов, и повторное подключение потеряет смысл).
    • Use Original IP Address After (Использовать исходный IP-адрес после). Настраивает интервал времени для повторного подключения. Этот параметр обычно синхронизируется с периодом, установленным в настройках очистки жесткого диска. В случае удаления незавершенной передачи файла повторное подключение к этому же серверу не имеет смысла. Клиенту потребуется повторное подключение с использованием исходного URL по прошествии указанного срока. Укажите любой интервал – от 1 секунды до 49 710 дней.
    Разрешение уведомлений

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

    • Notification Type (Тип уведомления). При выборе отправки имени файла сервер передает полный путь файла по URL уведомления. При выборе отправки данных файл передается сервером по URL уведомления с использованием метода HTTP POST.
    • Notification URL (URL уведомления). Указывает URL, используемый для отправки уведомлений. Укажите полный URL или относительный URL.
    Удаление незавершенных файлов

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

    • Schedule Cleanup (Назначение очистки). Назначает периодически выполняемую задачу для проверки наличия незавершенных файлов. При нахождении незавершенного файла его дата сопоставляется со значением срока удаления в поле Delete Incomplete Jobs After (Удалять незавершенные задания после). Если файл старше этого значения, он удаляется, и задание отменяется.
    • Run Cleanup Now (Выполнить очистку сейчас). Немедленно запускает процесс очистки. В противном случае очистка выполняется так же, как и при выборе опции Schedule Cleanup.

    Вкладка Server Extensions 2002 (Серверные расширения 2002)

    Вкладка (см. рис. 2.18) доступна только на уровне сайта, если установлены серверные расширения FrontPage 2002 Server Extensions. По умолчанию при открытии вкладки появляется сообщение о том, что серверные расширения для данного веб-сайта не включены.

    Рис. 2.18. Вкладка Server Extensions (Серверные расширения)

    1. В консоли IIS MMC выберите команду Action\All Tasks\Configure Server Extensions 2002 (Действие\Все задачи\Настройка Server Extensions 2002).
    2. Появится окно Internet Explorer с запросом входных данных. Введите аутентификационные данные с правами администратора.
    3. Откроется веб-сайт, для которого необходимо включить серверные расширения FrontPage Server Extensions 2002.
    4. Убедитесь, что в поле Administrator (Администратор) отображается нужная учетная запись, затем нажмите на кнопку Submit (Отправить).
    5. На веб-сайте Server Administration, открывшемся в окне браузера, настраиваются серверные расширения FrontPage Server Extensions.

    После включения серверных расширений во вкладке отобразится кнопка Settings (Параметры), с помощью которой открывается веб-сайт Server Administration (Администрирование сервера).

    Веб-сайт Server Administration (Администрирование сервера)


    На веб-сайте Server Administration (Администрирование сервера) настраиваются серверные расширения FrontPage. При открытии вкладки Server Extensions 2002 (см. рис. 2.18) вы увидите кнопку Settings (Параметры); в консоли IIS MMC будут недоступны параметры конфигурации. Нажмите на кнопку Settings для перехода на сайт FrontPage Server Administration (Администрирование сервера FrontPage) (см. рис. 2.19). Сначала отобразится страница Change Configuration Settings (Изменить параметры конфигурации). В верхней части страницы расположены гиперссылки администрирования, с помощью которых осуществляется переход на страницу администрирования сайта и к справке.

    Рис. 2.19. Страница Change Configuration Settings (Изменение параметров конфигурации) сайта FrontPage Server Administration (Администрирование сервера FrontPage)

    Страница изменения параметров конфигурации

    На странице Change Configuration Settings (Изменение параметров конфигурации) вы можете настроить общие параметры сайтов данного сервера. Для этого нужно быть членом локальной группы Administrators (Администраторы).

    Enable Authoring (Включить авторизацию). Включенная опция указывает на использование клиентами FrontPage для отгрузки содержимого на свои веб-сайты. По умолчанию при установке Server Extensions 2002 данная опция включена. Ее отключение запретит авторам сайтов публиковать новое содержимое. Администратор может воспользоваться этой возможностью при управлении или обновлении содержимого, если на это время нужно запретить публикацию. С точки зрения безопасности опцию не следует включать для работающего сайта, за исключением времени, когда производится отгрузка содержимого на сайт.

    Mail Settings (Параметры почты). Используется для настройки использования программой FrontPage служб электронной почты сервера. При настройке параметров SMTP указывается имя сервера SMTP или его IP-адрес. Нельзя указывать имя пользователя и пароль, поэтому убедитесь, что сервер принимает сообщения без запроса этих данных. С помощью опции настраиваются адреса From (От) и Reply (Ответ), кодировка сообщений и набор символов, если сервер электронной почты имеет другие настройки.

    Performance Tuning (Настройка производительности). Серверные расширения FrontPage позволяют настраивать кэширование веб-сайтов. При большом количестве страниц и документов кэширование сокращает среднее время отклика сайта. Измените один из параметров для настройки размера кэша:

      Web-наборы. Позволяют распределять запросы по нескольким рабочим процессам в данном пуле приложений, достигая большего уровня производительности и надежности, поскольку приложение будет использовать несколько рабочих процессов, и ошибка в одном из них не повлияет на работу остальных. Параметр Maximum Number Of Worker Processes (Максимальное число рабочих процессов) устанавливает количество рабочих процессов в данном пуле приложений. Укажите любое значение от 1 до 4 000 000.

    Предупреждение. Установка слишком большого числа рабочих процессов отрицательно скажется на производительности системы, поскольку каждый процесс занимает около 5 Мб памяти только при запуске. Имейте это в виду при указании максимального количества выполняемых на сервере рабочих процессов.
    Вкладка Health (Состояние)

    Во вкладке Health (Состояние) (см. рис. 2.25) настраиваются параметры, поддерживающие рабочее состояние данного пула приложений, и параметры обнаружения проблем.

    Рис. 2.25. Вкладка Health (Состояние)

    • Enable Pinging (Включить пинг-запросы). Настраивает систему на периодическую отправку пинг-запросов рабочим процессам. Отсутствие ответа от рабочего процесс означает наличие в нем проблемы; IIS уничтожает данный процесс и вместо него создает новый. Укажите любое значение от 1 до 4 000 000 с.
    • Rap >Ниже приведено описание работы рассматриваемого процесса.
    1. В рабочем процессе возникает ошибка.
    2. IIS записывает событие о неожиданном завершении работы процесса в журнал приложений, указывает идентификационный номер процесса и код выхода.
    3. IIS перезапускает рабочий процесс автоматически при поступлении другого процесса.
    4. Действия повторяются до достижения порогового значения.
    5. По достижении порогового значения IIS записывает в журнал приложений событие об автоматическом отключении пула приложений из-за многократного возникновения ошибок.
    6. Все клиенты, использующие данный пул приложений, получат сообщение об ошибке 503 «Service Unavailable» («Служба недоступна»).
    7. Действия повторяются до тех пор, пока пул приложений не будет остановлен и перезагружен.

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

    • Startup Time Limit (Предел времени загрузки). Служит для настройки промежутка времени, в течение которого IIS ожидает запуск рабочего процесса. Укажите любой интервал времени от 1 до 4 000 000 с.
    • Shutdown Time Limit (Предел времени отключения). Служит для настройки промежутка времени, в течение которого IIS ожидает запланированное завершение рабочего процесса. Укажите любой интервал времени от 1 до 4 000 000 с.
    Вкладка >Во вкладке Identity (Идентификация) (см. рис. 2.26) указывается учетная запись безопасности, используемая рабочим процессом в пуле приложений. По умолчанию рабочие процессы выполняются как сетевые службы (включена опция Network Service [Сетевая служба]) c ограниченными правами в операционной системе.

    Рис. 2.26. Вкладка Identity (Идентификация)

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

    • Network Service (Сетевая служба). Параметр по умолчанию, являющийся наиболее безопасным и рекомендуемый для выполнения рабочих процессов. В этом случае невозможен непосредственный доступ рабочих процессов к операционной системе и управление ею.
    • Local Service (Локальная служба). Обеспечивает более широкий набор прав в операционной системе, чем предыдущая опция. Предоставляет право доступа к операционной системе, но запрещается доступ к объектам за пределами сервера. Запрещается и взаимодействие с рабочим столом.
    • Local System (Локальная система). Обеспечивает более широкий набор прав, чем Local Service (Локальная служба). На самом деле опция предоставляет права полного доступа ко всей системе.

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

    • Configurable (Настраиваемая). Указывает учетную запись, под которой будут выполняться рабочие процессы. Введите имя учетной записи или нажмите на кнопку Browse (Обзор) и выберите учетную запись в появившемся окне.

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

    ASP (COMPONENTS) Active Server Pages (cont..) 1. global.asa file The Global.asa file is an optional file that can contain declarations of objects, variables,

    Published byCarmella Doyle Modified over 3 years ago

    Similar presentations

    Presentation on theme: «ASP (COMPONENTS) Active Server Pages (cont..) 1. global.asa file The Global.asa file is an optional file that can contain declarations of objects, variables,»— Presentation transcript:

    1 ASP (COMPONENTS) Active Server Pages (cont..) 1

    2 global.asa file The Global.asa file is an optional file that can contain declarations of objects, variables, and methods that can be accessed by every page in an ASP application. All valid browser scripts (JavaScript, VBScript, JScript, PerlScript, etc.) can be used within Global.asa. The Global.asa file can contain only the following: Application events Session events declarations TypeLibrary declarations the #include directive Note: The Global.asa file must be stored in the root directory of the ASP application and each application can only have one Global.asa file. 2

    3 ASP : Components 3 ASP Components are set of built-in- tools that automate common tasks such as displaying advertisements, keeping track of number of visitors etc. ASP components are created by using CreateObject method of Server object, ASP components are : 1.Ad Rotator is used to display banner advertisements on web pages. 2.Content Rotator – used to rotate HTML content on a page 3.Counter Component – used to store, increment or retrieve a value that persists for the lifetime of an application. 4.Page Counter – to keep track of number of visitors visited the web page 5.Permission Checker Component – used to check whether the user has permission to read or execute a particular file.

    4 Ad Rotator Component 4 Used to display a series of different banner advertisements each time the Web page is viewed. Specifies how frequently different advertisements should be displayed. Also records the number of times an advertisement has been clicked by the user. The different files used by the Ad Rotator component are:  Rotator Schedule File – a text ASCII file containing information about the images to be rotated.  ASP File – the webpage that will display the advertisement along with other information.  Redirection File – implements redirection and enables the Ad Rotator component to record how many users click on each advertisement.

    5 Rotator Schedule File is an ASCII file that keep track of the images to be displayed, how frequently to be displayed, the advertiser’s URL where the user will be redirected when he clicks on the advertisement. This scheduler has 2 parts separated by a * sign :- – First part : it has 4 optional global parameters applicable to all advertisements. If no parameter is mentioned, the default value will be used. – Second part : It specifies file and location information for each individual advertisement and percentage of display time that each ad should receive. Properties: – Redirect : Redirect URL – specifies the URL of the file that implements the redirection. – Width : Width num – specifies the width of the ad in pixel, default value is 440 – Height : Height num – specifies pixel height, 60 is the default value – Border : Border num – specifies the thickness of the border around the ad in pixel. Default value is 1 5

    6 Second section contains 4 lines: Line 1 – image of the file containing ad graphics Line 2 – URL of the web page to which user will redirect when the ad is clicked by the user Line 3 – Text description to be displayed Line 4 – Frequency with which the ad will be displayed. 6 REDIRECT redir.asp W > An instance of Ad Rotator component is created using CreateObject() method of the server object and assigned to myAd variable using Set statement. GetAdvertisement() method of Ad Rotator is used to retrieve information about the ad to be displayed from the rotator schedule file sent as parameter. ASP file is needed to display the ads stored in the above rotator schedule file using the Ad Rotator component. Adhomepage.asp

    7 7 ASP AdRotator Component The ASP AdRotator component creates an AdRotator object that displays a different image each time a user enters or refreshes a page. A text file includes information about the images. Note: The AdRotator does not work with Internet Information Server 7 (IIS7). Syntax

    8 ASP AdRotator Example 8 The lines below the asterisk in the text file specifies the name of the images (ads) to be displayed, the hyperlink addresses, the alternate text (for the images), and the display rates (in percent). The first line in the text file above specifies what to happen when a visitor clicks on one of the images. The redirection page (banners.asp) will receive a query string with the URL to redirect to. Tip: To specify the height, width, and border of the image, you can insert the following lines under REDIRECT: REDIRECT banners.asp WIDTH 468 HEIGHT 60 BORDER 0 * w3s.gif. Assume that we have the following text file, named «ads.txt»: REDIRECT banners.asp * w3s.gif http://www.w3schools.com Free Tutorials from W3Schools 50 xmlspy.gif http://www.altova.com XML Editor from Altova 50

    9 Ad Rotator Properties: Border AdRotator.Border = size Specifies the thickness of the border around the advertisement in pixels. Clickable AdRotator.Clickable = value, value is true or false Specifies whether the ad should function as a hyperlink. TargetFrame AdRotator.TargetFrame = frame Specifies the name of frame into which the ad link should be loaded. 9

    10 Content Rotator Component 10 The ASP Content Rotator component creates a Content Rotator object that displays a different content string each time a visitor enters or refreshes a page. A text file, called the Content Schedule File, includes the information about the content strings. The content strings can contain HTML tags so you can display any type of content that HTML can represent: text, images, colors, or hyperlinks. Syntax

    11 11 Methods of Content Rotator ChooseContent ContRot.ChooseContent(schedule-path) Retrieves a HTML content string from the Content Schedule File randomly and displays on the current page. GetAllContent ContRot.GetAllContent(schedule-path) Retrieves all of the HTML content string from the Content Schedule File and write them directly to the web page as a list with tag after each entry.

    12 12 ASP Content Rotator Example The following example displays a different content each time a visitor views the Web page. First, create a text file named «textads.txt» and place it in a subfolder called «text». «textads.txt»: % #3 This is a great day!! % #3 % #4 Visit W3Schools.com Notice the #number at the beginning of each content string. This number is an optional parameter that indicates the relative weight of the HTML content string. In the text file above, the Content Rotator will display the first and second content string three-tenth of the time, and the third string four-tenths of the time.

    13 13 Then, create an ASP file, and insert the following code: Example

    14 14 ASP Source NOTE: Because the content strings are changed randomly in the text file, and this page has only four content strings to choose from, sometimes the page will display the same content strings twice in a row. Output This is a great day!! NOTE: Because the content strings are changed randomly in the text file, and this page has only four content strings to choose from, sometimes the page will display the same content strings twice in a row.

    15 Counters Component 15 A counter is a persistent value that contains an integer. You can manipulate a counter with the Get, Increment, Set, and Remove methods of the Counters object. Once you create the counter, it persists until it is removed. Counters do not automatically increment on an event like a page hit. You must manually set or increment counters using the Set and Increment methods. Counters are not limited in scope. Once you create a counter, any page on your site can retrieve or manipulate its value. For example, if you increment and display a counter named hits in a page called Page1.asp, and you increment hits in another page called Page2.asp, both pages will increment the same counter. If you hit Page1.asp and increment hits to 34, hitting Page2.asp will increment hits to 35. The next time you hit Page1.asp, hits will increment to 36. All counters are stored in a single text file, Counter.txt. Only create one Counters object in your site. This single Counters object can create any number of individual counters.

    Note: ASP Counter Properties — None» > 16 16 Syntax: ASP Counters Component The Counters control is registered with the Prog > Note: ASP Counter Properties — None

    17 17 MethodsSyntaxDescription SetCounters.Set (CounterName, int) Where countername is the name of the counter and int specifies the new value for the countername. Sets the value of the counter to the specified value. If the counter does not exist it creates a new counter and sets its values. GetCounters.Get(CounterName) Where CounterName specifies the name of the counter Takes the name of the counter as parameter and returns the current value of the counter. IncrementCounters.Increment(CounterName)Increment the current counter value by 1 and returns the new value, if does not exist, then sets the value as 1. RemoveCounters.Remove(CounterName)Removes the counter from the Counter Object. ASP Counters Component Methods : Get, Set, Increment, Remove

    18 Examples: ASP Counters Component Get Method Display the value of a counter with: Assign the value of the counter to a variable with: The following script displays the vote tally from a poll about favorite colors. Current vote tally: red: green: blue: 18

    19 19 Examples: ASP Counters Component Increment Method Increment the value of a counter with: Increment and display the value of a counter with: To retrieve the value of a counter, use Counters.Get. To set a counter to a specific value, use Counters.Set. The following code implements a one-line page-hit counter. There have been visits to this Web page. In this example, Counters.Increment increases the counter by one each time the client requests the page from the server.

    20 20 Example: ASP Counters Component Remove Method The following code removes the counter hitscounter from the Counter.txt file. Example: ASP Counters Component Set Method The following code resets the hit counter pageHits to 0:

    Do you like Pizza Yes No Cannot say Input Type = SUBMIT value= submit vote Current Vote Tally Yes No Can not say this page has been visited times» > 21 21 Examples: ASP Counters Component Opinion Poll Do you like Pizza Yes No Cannot say Input Type =»SUBMIT» value= «submit vote» Current Vote Tally Yes No Can not say this page has been visited times

    22 Page Counter Component 22 Creates a counter which counts the number of times a page has been viewed, similar to Counters component, while Counters component is set manually, the page counter component is an automatic process. Syntax : Set myVar = Server.CreateObject(“MSWC.PageCounter”) Methods: Hits — myVar.Hits( [pathInfo]) – if the path Info is not specified, the hit count for the current page is displayed, i.e., number of times a specified Web page has been opened. PageHit – myVar.PageHit() – Increments the hit count for the current Web page by 1. Reset — myVar.Reset ( [pathInfo]) – Resets the hit count for a specified Web page to 0. Example : This Page is visited

    23 Permission Checker Component 23 Can be used to check whether the user has permission to access a particular file or not, this is possible by the password authentication protocols prov >

    Работа со статическими файлами¶

    Статические файлы, как HTML, CSS, изображения и JavaScript, являются активами, которые ASP.NET Core приложение может передавать клиентам напрямую.

    Передача статических файлов¶

    Статические файлы обычно расположены в папке web root ( /wwwroot). См. о Content root и Web root в Введение в ASP.NET Core . Обычно корневая директория контента — это текущая директория, так что web root можно найти во время разработки.

    Статические файлы можно хранить в любой подпапке web root и получить к ним доступ по относительному пути к корневой директории. Например, когда вы создаете проект веб приложения по умолчанию с помощью Visual Studio, внутри wwwroot есть несколько папок — css, images и js. URI для доступа к подпапке images:

    Для передачи статических файлов вы должны настроить Связующее ПО (Middleware) , чтобы добавить статические файлы в поток. Связующее ПО статических файлов можно настроить, если добавить в проект зависимость для пакета Microsoft.AspNetCore.StaticFiles, а затем вызвать из Startup.Configure метод расширения :dn:method:`

    app.UseStaticFiles(); делает файлы в web root (wwwroot по умолчанию) готовыми к передаче. Позже я покажу вам, как сделать другой контекст директории готовым к передаче с помощью UseStaticFiles .

    “Microsoft.AspNetCore.StaticFiles” нужно включить в файл project.json.

    web root по умолчанию настроен на директорию wwwroot, но вы можете это изменить с помощью метода :dn:method:`

    Допустим, архитектура вашего проекта такова, что статические файлы находятся вне web root . Например:

    • wwwroot
      • css
      • images
      • .
    • MyStaticFiles
      • test.png

    Для доступа к test.png настройте связующее ПО статических файлов следующим образом:

    Авторизация статических файлов¶

    Модуль статических файлов не требует проверки авторизации. Любые файлы, с которыми он работает, включая те, что находятся в wwwroot, общедоступны. Если вы не хотите, чтобы файлы были общедоступны:

    • храните из за пределами wwwroot и любой директории, к оторой имеет доступ связующее ПО статических файлов и
    • работайте с ними через действие контроллера, возвращая :dn:class:`

    Просмотр директорий¶

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

    Добавьте требуемый сервис, вызвав метод расширения :dn:method:`

    Код сверху разрешает просмотр директории для папки wwwroot/images с помощью URL http:///MyImages со ссылками на каждый файл и папку:

    См. Соображения_ по рискам для безопасности при включении просмотра директорий.

    Обратите внимание на два вызова app.UseStaticFiles . Первый требуется для передачи CSS, изображений и JavaScript в wwwroot, а второй вызов — для просмотра директорий для папки wwwroot/images с помощью URL http:///MyImages:

    Передача документа по умолчанию¶

    Домашняя страница по умолчанию — это обычно то место, откуда посетители начинают просматривать ваш сайт. Если вы хотите, чтобы пользователь мог увидеть домашнюю страницу, не вводя полный URI, вызовите метод расширения UseDefaultFiles из Startup.Configure :

    При передаче файла по умолчанию :dn:method:`

    Microsoft.AspNetCore.Builder.DefaultFilesExtensions.UseDefaultFiles` нужно вызывать перед UseStaticFiles . UseDefaultFiles переписывает URL, а не передает файл. Чтобы передать файл, вы должны включить связующее ПО статических файлов ( UseStaticFiles ).

    • default.htm
    • default.html
    • index.htm
    • index.html

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

    В следующем коде показано, как изменить имя файла по умолчанию на mydefault.html.

    UseFileServer¶

    Следующий код разрешает передачу статических файлов и файла по умолчанию, но запрещает просмотр директорий:

    Следующий код разрешает передачу статических файлов, файла по умолчанию и просмотр директорий:

    Как и с UseStaticFiles , UseDefaultFiles и UseDirectoryBrowser , если вы хотите передать файлы, которые существуют вне web root , вы создаете экземпляр и настраиваете объект :dn:class:`

    Microsoft.AspNetCore.Builder.FileServerOptions` , который вы передаете в качестве параметра UseFileServer . Допустим, иерархия вашего приложения такова:

    Далле, допустим, вы хотите включить для директории MyStaticFiles статические файлы, файл по умолчанию и просмотр. Это делается с помощью одного вызова :dn:class:`

    Если enableDirectoryBrowsing установлен на true вам необходимо вызвать метод расширения :dn:method:`

    Если использовать вышеуказанный код для данной иерархии:

    URI Ответ
    http:///StaticFiles/test.png MyStaticFiles/test.png
    http:///StaticFiles MyStaticFiles/default.html

    Если в директории MyStaticFiles нет именованных файлов по умолчанию, http:///StaticFiles возвращает из директории список с рабочими ссылками:

    FileExtensionContentTypeProvider¶

    Microsoft.AspNetCore.StaticFiles.FileExtensionContentTypeProvider` содержит коллекцию, которая приводит расширения файлов к контекстным типам MIME. В следующем примере несколько расширений файлов регистрируются как известные MIME типы, ”.rtf” заменен, а ”.mp4” удален.

    Нестандартные контекстные типы¶

    Связующее ПО статических файлов ASP.NET понимает почти 400 известных контекстных типов. Если пользователь запросит файл неизвестного типа, связующее ПО вернет ответ HTTP 404 (Not found). Если включен просмотр директорий, будет отображена ссылка к файлу, но URI вернет ошибку HTTP 404.

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

    В данном случае, если будет запрошен файл неизвестного типа, вернется изображение.

    Microsoft.AspNetCore.StaticFiles.FileExtensionContentTypeProvider` предлагает более безопасную альтернативу для передачи файлов с нестандартными расширениями.

    Размышления¶

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

    ASP.NET Core приложения с хостингом на IIS используют ASP.NET Core Module, чтобы передавать все запросы приложению, включая запросы для статических файлов. Обработчик статических файлов IIS не используется, потому что у него нет шансов обработать запросы до того, как их обработает ASP.NET Core Module.

    Чтобы удалить обработчик статических файлов IIS (на уровне сервера или веб сайта):

    Scott Sauber

    Software Developer – ASP.NET Core, JavaScript, and DevOps

    Dynamically setting Content Type in ASP.NET Core with FileExtensionContentTypeProv > February 25, 2020 April 15, 2020 Scott Sauber Leave a comment

    If you have a scenario where you have multiple file types (.pdf, .docx, etc.) stored somewhere (in a database, file system, etc.), that need to be downloaded, you can automatically figure out the Content Type by newing up a FileExtensionContentTypeProvider and call TryGetContentType to get the Content Type and pass that to the File result helper. See lines 8-16 below

    What is a Content Type?

    A Content Type is how the server tells the browser what type of file the resource being served is. That way the browser knows how to render whether it’s HTML, CSS, JSON, PDF, etc. The way the server does this is by passing a Content-Type HTTP Header. This value of the header will look like “text/html” for HTML, “text/css” for CSS, “application/json” for JSON, “application/pdf” for PDF’s, and so on. A complete list can be found on the IANA official docs.

    Note: A Content Type can also be called a MIME type, but because the header is called Content-Type, and ASP.NET Core calls it the Content Type in the code I’m going to be showing, I’m going to call it Content Type for consistency throughout this post.

    How do I set the Content Type in ASP.NET Core?

    The good news is, for a vast majority of the static files you’re going to serve, the Static Files Middleware will set the Content Type for you. For scenarios where you need to set the Content Type yourself, you can use the FileContentResult in your Controllers or PageModels via the File helper method used on line 11 below.

    What happens if I set the wrong Content Type?

    If you set the wrong Content Type, then you may cause issues for your application. For example, the PDF rendered in the code above will render a PDF in the browser like this:

    But what happens if I replace that “application/pdf” string with “application/json” to try to tell the browser the PDF is really JSON? Well… let’s find out:

    Well that’s not good. So, setting the correct Content Type is pretty important. (Also, yes I know I need to update Chrome…. don’t judge me. I have a bunch of tabs open in another window that I’m totally going to look at some day, ok?)

    Scenario

    Let’s say you have a scenario where you allow admin users to upload files that allows some customer users to download those files. Those admin users can uploads all sorts of file extensions such as a pdf, pptx, docx, xlsx, etc. that customers can then download themselves. This means that you can’t assume and be sure what the Content Type should be, so you need to inspect the file extension to figure it out. No big deal, there are a few ways to solve this, but the simplest is to just write a trusty ol’ switch statement like lines 11-25 below to handle every file type we allow.

    The problem with that is trying to maintain a list of all those mappings yourself is annoying, and likely leads you to adding “just one more” when your users want to support another file type you didn’t previously have. It’s also prone to typo’s, because some of these content types are ridiculously convoluted.

    Asp файл content schedule

    The Content Schedule file contains information that the ContentRotator object uses to manage and display the specified content.

    In this file you include any number of HTML content string entries. Each entry consists of two parts: a line that begins with double percentage signs (%%) and contains both the relative weight and any comments, and a second part that contains the HTML content string itself.

    Syntax

    Parameters

    For example, if a Content Schedule file contained three content strings with respective weights of 1, 3, and 4, the Content Rotator displays the first content string one-eighth of the time, the second string three-eighths of the time, and the third string half of the time.

    A Weight of 0 will cause a content entry to be ignored.

    If Weight is not specified, the default value is 1.

    Comments This optional parameter contains comments about the entry. These comments are for development use only and are not displayed to the user. If you require more than one line of comments, you must start each additional comment line with a line delimiter (%%) followed by a comment delimiter (//).
    ContentString The HTML content that the ContentRotator object displays. For example, you can present a line of text, an image, or a sound.

    ContentString may include one or more lines. The ContentRotator object treats everything between blocks of double percent signs (%%) as a single HTML content string.

    Example

    The following is an example of a Content Schedule file. Note that because the content strings can contain HTML tags, you can display any type of content that can be represented with HTML, including text, images, and hyperlinks.

    Илон Маск рекомендует:  Преобразование негатива в позитив
    Понравилась статья? Поделиться с друзьями:
    Кодинг, CSS и SQL