WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!

Range Validation

Как в HTML-коде есть строка «Out of Подводя можно что чаще всего при наличии на странице не более элементов проверки рекомендуется при сваивать атрибуту значение Static.

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

Web-формы В есть элемент управления — Validation Summary. Он обрабатывает все сообщения об ошибках от всех элементов проверки и выводит их в одном месте. В листинге 5- показано, как этот элемент управления применяется на страни 172 Глава

Validator Test Page - Summary

Pages:     | 1 || 3 | 4 |   ...   | 5 |

«т Посвящается Тиму и Эрин — я живу благодаря людям, которых люблю. ...»

-- [ Страница 2 ] --

слов! Открывайте-ка главу к программированию приложений Глава После того как вы решили создать динамическое информацион ное наполнение для Web (а это рано или поздно), вам придется необходимый для этого инструментарий. В 1 вы узнали о некоторых традиционных та как ISAPI и ASP. Среда — средство разработки динамических Web-приложений, и в этой главе изло жены необходимые для работы в ней. Разра ботка в зо многом похожа на традиционную ASP-cpegy, но много отличий. опытных я спе циально отметил отличия между ASP и Здравствуй, мир ASP.NET!

В пособиях по языкам программирования почти всегда приводят пример программы, выводящей сообщение «Hello World» («Здрав ствуй В главе — кратком введении в ASP — показан ти пичный пример такой программы 4-1).

Option Explicit ASP 80 Глава

Dim x For x=1 to & x) ASP & Next Листинг 4-1. Простейшее приложение SayHelloASP.asp Пример на С# В листинге 4-2 показан исходный текст программы на задачу.

Page 2 т Посвящается Тиму и Эрин — я живу благодаря людям, которых люблю. Douglas J. Reiily DESIGNING Microsoft* ASP.NET APPLICATIONS Press Д. Рейли СОЗДАНИЕ ПРИЛОЖЕНИЙ Microsoft* ASP.NET Москва 2002 004.45

int loop;

String ( ;

loop<=5 ;

loop++ } s=s + I Листинг Приложение на С# Основы разработки приложений в ASP.NET В ASP имена файлов имеют рас ширение а ASP.NET - -.aspx. (V последних могут быть и другие но наиболее близок расширению в ASP.) ASP и могут бок о бок на Web-сайте, од нако при этом у них не будет общих параметров приложений или информации о сеансах работы.

Лучше хранить ASP и в разных а взаимодействие между ними с применением URL-аргументов или общей базы данных.

В листинге 4-2 вы найдете много версии ASP.NET от про граммы в ASP (листинг Во-первых, язык: написа на на а не на VBScript или одной из версий Visual Basic. В пер строке на директивы Option в указана дирек тива она также определяет язык, в данном случае — Так как пример написан на С#, особого принуждения к нию переменных с помощью директивы Option Explicit не требу она в этом языке и не поддерживается, У директивы Page несколько важных атрибутов, которые вам следует знать. Основные перечислены в таблице Таблица Атрибуты директивы Page Атрибут Описание Buffer буферизацией HTTP-ответов. Если ат рибут установлен в true (по умолчанию), буфери зация страницы включена, а значение false отклю чает буферизацию. В общем, предварительная бу феризация до получения браузером страни цы позволяет улучшить производительность работы со страницей, но при этом отображение страницы откладывается, пока не вся информа ция. Сложные страницы часто размещают в HTML-таблицах. Если страница представлена в виде таблицы, она не отображается, пока не по лучен элемент таблицы, поэтому яв ная буферизация таких страниц практически ни как не влияет на их отображение (см. стр.) 4 Зак Глава Таблица Атрибут Описание тип содержимого HTTP-ответа в виде стандартного В частности, если атрибут установлен в для документа вызывается приложение, поставленное а не браузер Если атрибут установлен в поддерживается состояние сеанса, при значении атрибута Readonly разрешается чтение, но не редактирование состо яния сеанса, а при значении false состояние сеан са не поддерживается Определяет (в зависимости от значения — true или сохраняется ли состояние страницы (view state) между запросами Определяет URL-адрес для переадресации при необрабатываемой ошибки Explicit При установке атрибута в true в Visual Basic включается режим Option в котором тре переменные Inherits Определяет которому наследу ет страница. Допустимы любые имена классов, производных от класса Page Language Задает язык, используемый во всех встраиваемых участках кода (обрамленных значками и Допустимо указывать любые языки, поддерживае мые в том числе Visual Basic, или Strict Если атрибут установлен в true, в Visual Basic включен режим Option Strict, в котором переменные и запрещено приведение типов с данных (в зависимости от положений true или включена ли трассировка. По умолчанию ат рибут установлен в false. Применяется для отлад ки программ Transaction Определяет, поддерживаются ли на странице транзакции. Допустимые значения (по умолчанию), Supported, Required или Определяет уровень диагностики, при котором компьютер прекращает компиляцию страницы.

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

Отрезок программы, который открывается значком и закры вается значком написан на языке Программисты, пишу на C/C+ +, без труда поймут код сценария 0 этом блоке.

Объявляются две целое число loop и строка s. В цикле for размер шрифта изменяется от 1 до 5. В переменной s я размещаю создаваемый HTML-код. Для вывода информа ции вместо команды Response (очень популярный метод на ASP-страницах) я задал значение объекта Message. Message — это HTML-тэг , далее в HTML-коде:

Обратите внимание, что для ссылок на HTML-тэг SPAN исполь зуется атрибут id. Другая важная особенность этого тэга — ат рибут показывающий, что он исполняется на сервере. В часто применяются элементы управления, исполняемые на стороне сервера. Также следует отметить отсут ствие закрывающего тэга . Это кажущееся упущение замыкающие символы /> означают, что тэг явля ется и открывающим, и закрывающим.

Примечание Даже если образом поместить текст между тэгами u , он не отобразится браузером, так как команда заменит его содер жимым переменной s. Если заменить эту команду на + s, текст в HTML-коде между тэгами и ото 84 Глава в браузере, а за ним будет расположен созданный в цикле.

Пример на Visual Basic В листинге 4-3 показана та же страница, но на Visual Basic Этот код мало чем от листинга 4-2.

Page 2 т Посвящается Тиму и Эрин — я живу благодаря людям, которых люблю. Douglas J. Reiily DESIGNING Microsoft* ASP.NET APPLICATIONS Press Д. Рейли СОЗДАНИЕ ПРИЛОЖЕНИЙ Microsoft* ASP.NET Москва 2002 004.45 Dim as Integer Dim s as String to s= s + ASP. NET _ Next />

Листинг Файл SayHelloASPDOTNET.aspx — пример исходного текста приложения На рис. 4-1 показана страница, на Visual Basic вид созданных на Visual Basic и по чти не отличается.

Основы разработки приложений в My First flSPX File Edit Tods Help Go ftllo World World Hello World Hello ASP.NET World Рис. Вид (листинг 4-3), созданной на Visual Basic В этом примере я несколько очевидных синтаксических из менений. В частности, удалил точки с запятыми в конце опера торов и фигурные скобки ({ и }), изменил синтаксис цикла for и переменных. я обычно использую переменную loop в C/C++ (а теперь и в С#), в Visual Basic это за резервировано, поэтому я изменил имя переменной.

Методика приложений в ASP.NET В целом, создание в ASP.NET похоже на разработку в более ранних версиях ASP. На рис. 4-2 показана схема рабочего процесса с точки зрения ASP-разработчика. Процесс заключается в многократном повторении цикла «редактирование страницы — тестирование».

Глава исходного текста Тестирование Рис. Цикл разработки ASP-страниц В процесс абсолютно так же, за исключением некоторых базовых На рис. 4-3 показан необходимый процесс: «редактирование Про цесс компиляции незаметен разработчику до запуска при ложение не было скомпилировано, это происходит автоматичес ки при запуске.

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

Основы разработки приложений в Редактирование исходного текста Рис. Цикл разработки в ASP.NET Создание Web-приложений в Visual Studio Хотл Web-приложения в ASP.NET -- это один из многих возможных типов именно их создают чаще Для создания в ASP.NET не обязательно исполь зовать Visual Studio но эта среда сильно облегчает жизнь.

При запуске Visual Studio начальная страни ца Start Page. Она является входом в среду Visual Studio и позволяет быстро выполнять множество стандартных операций.

Одна из замечательных особенностей страницы Start Page My Profile (рис. 4-4).

Раньше многие программисты, использующие Visual Studio предпочитали одну из трех интегрированных сред (integrated development environment, IDE): Visual InterDev, Visual Basic Visual C + +. Исторически сложилось, что эти среды довольно сильно различаются, и разработчики, пользующиеся 88 Глава одной IDE, часто скептически относились к другим. Чтобы все программисты чувствовали себя одинаково комфортно в новой IDE-среде, в Visual предусмотрена возможность на страивать внешний вид различных окон и схемы клавиатуры в с личными предпочтениями. Конечно, не всех об радуют все особенности IDE-среды, но общая среда раз работки — это необходимый и логичный шаг к поддержке раз работки на многих языках.

tfsnfv that the i Help • Microsoft Рис. Окно My Profile в Visual Studio Примечание Visual Studio поддержива ет создание приложений на Visual Basic C# или C + +, в настоящий момент она не позволяет созда вать страницы которых напи саны на разных языках, например одни — на Visual Basic а другие — на С#. Я надеюсь, что в бу дущих среды будет предусмотрена более полная интеграция различных языков в рамках од ного решения (solution). Стоит отметить, что so Основы разработки приложений в Visual Studio который при меняется для описания контейнера, объединяюще го несколько взаимосвязанных проектов.

Изменение внешнего окна для имитации различных сред в Visual Studio — интересное которое может вызвать состояние дежа-вю. Хотя мне очень нравился вид Visual при создании примеров для книги я ис пользовал принятый по умолчанию вид Visual Studio. После не скольких месяцев работы в нем я понял, что он вполне хорош.

В Visual Studio предусмотрено несколько способов создания нового проекта. Стандартный — выбрать команду Project в под меню New меню File. Откроется диалоговое окно, показанное на рис. 4-5.

Visual Visual Class Library Windows and Deployment Control Library Л, j Visual Studio Solutions Web Web A for an Web......

Рис. Диалоговое окно New в Visual Studio В дереве папок слева выбирают язык проекта или один из не скольких типов особых проектов. В версии Enterprise среды Visual Studio в папке Other Projects отображаются шаблоны кор поративных проектов, которые применяются для создания боль ших распределенных приложений.

В зависимости от выбранного типа проекта текст в поле Location диалогового окна New Project изменяется на имя папки или URL Глава адрес локального Web-сервера. На рис. 4-5 это виртуальная папка з корне Web-папки, так как тип выбранного проекта — Web Application.

Studio и Для примера я предпочел Visual Basic Web Application и назвал проект chap04. По щелчку кнопки OK происходит несколь ко Так же как в Visual C + + название проекта стано вится именем папки, в которой приложение. Кроме того, Visual Studio примере локальный Web-сервер) и создает папку для приложения с таким же именем. Когда проект создан, в консоли Internet Information Services папка, созданная для приложения (рис 4-6).

У I vb Рис. Папка для ия, создаваемая Visual Studio при создании приложения в ASP.NET В правой панели отображаются значки созданных Visual Studio Наиболее важные файлы для как разработчи — файл Web-формы (предусмотрительно названный Web и файл логики страницы, или Если проект создается на файл получит название.aspx.cs. Web.config позво ляет настраивать параметры приложения (об этом — чуть позже).

Кроме того, Visual Studio создает папку bin, в которой хра нится скомпилированный код приложения, Основы разработки приложений в В папки кнопкой мыши щелкни те папку chap04 в консоли Internet Information Services и в контек стном меню выберите команду Properties вы не най дете ничего необычного. Чтобы открыть диалоговое окно кон Application Configuration (Настройка приложения), на вкладке Directory (Каталог) страницы щелкните кнопку Configuration (рис. 4-7).

Рис. Диалоговое окно Application Configuration созданной для приложения chap На вкладке Арр Mappings (Отображение приложений) показан список исполняемых файлов или DLL-библиотек, которые обра батывают данные расширения. В данном случае полный путь к исполняемому очень длинный, поэтому его не видно це ликом — просто поверьте мне на слово, что все исполняемые ASP.NET в IIS указывают на При написании данной главы я использовал версию среды — ее номер и показан в имени пути к DLL, которая обрабатывает приложения ASP.NET.

Номер версии в пути к очень так как использовать различные работающие с разными версиями ASP.NET.

92 Глава Первая созданная в Visual Studio После создания проекта и папки приложения в IIS окно Visual Studio выглядит, как показано на рис. 4-8. Следует отметить несколько важных моментов, касающихся Visual Studio.

Во-первых, обратите на бледную сетку на вкладке.aspx — она отображается при включенном режиме Grid Layout и позволяет точно позиционировать компоненты, так же как в традиционной форме в Visual Basic.

Рис. Окно Visual Studio после создания нового проекта Web Application в режиме Grid Layout Примечание Метод обеспечения точного разме компонентов заслуживает небольшого при мечания. Традиционно HTML не позволяет точно управлять расположением компонентов на Web странице. В режиме Layout для позициониро вания компонента применяются DHTML и Style а браузеру сообщают Основы разработки приложений в ся точные координаты для его отображения. Это замечательная но ее умаляют две проблемы.

Первая -- что делать с устаревшими которые не поддерживают DHTML и Для бо точного расположения ру отправляется сложная система таблиц, которая в большинстве случаев достаточно хорошо справля ется с размещением компонентов. Вторая трудность в том, что при использовании точного управления страницей подчас получается очень неустойчивый внешний вид страницы. если установлен ные на компьютере шрифты не совсем совпадают с использованными внешний вид может сильно измениться. Решение об использова нии режима Flow Layout вместо Grid Layout мает сам разработчик. Данный параметр располага ется в диалоговом окне страницы. Если вы разрабатываете приложение для Интернета, а не для интрасети, в которой конфигурация клиентов обыч но определена заранее, не стоит пользоваться режи мом Layout, хотя он действительно удобен. В примерах данной книги для выравнивания компо нентов используются таблицы, а не режим Grid Layout. Следующий пример — исключение, так как мне хотелось продемонстрировать вам IDE-среду, а режим Grid Layout как нельзя лучше подходит для этого.

Чтобы открыть панель Toolbox, щелкните вкладку Toolbox в ле вой части экрана (снизу от значка Server Explorer) или кнопку на панели В данном примере я создал две надписи, разместил их на сетке одну под другой и отцентриро вал по горизонтали 4-9). Нижняя надпись немного шире, чем Глава : Г] ;

• т Рис. Основная форма приложения chap04 с надписями два основных способа изменения объектов на в режиме конструирования. В первом применяется па нель которая по умолчанию располагается з нижнем правом углу Visual Studio. Чтобы изменить надпись, про сто щелкните ее (она называется и измените ее В Text введите «Your First Page» («Ваша первая страница Чтобы текст поместился на одну строку, может потребоваться изменить размер надписи. Далее выбери те Font. Рядом с ним стоит значок щелкнув рый вы откроете список подчиненных свойств. под чиненное в True. Все изменения немедленно ото бразятся в окне конструктора.

Второй способ изменения объектов исходный текст. Воспользуемся им для изменения надписи Это можно сделать несколькими способами. Во-первых, обрати те внимание на две вкладки в части окна дизайнера Design (она активна) и HTML. Перейдите на вкладку HTML — вы Основы разработки приложении в увидите исходный отформатированный способом, который очень напоминает отображение в Visual 6. (рис 4-10).

Рис. Вид исходного HTML-текста в Studio Хота этого не видно на рисунке, в самом строки с тэгом между открывающим и закрывающим тэгами расположен текст, который вы ввели в панели Properties. В соот ветствии с изменениями, сделанными в окне Properties, атрибут Font-Bold установлен в Конструктор поддерживает момен тальную синхронизацию между то есть изме нения в исходном HTML-тексте немедленно отображаются на зкладке Design. Например, если щелкнуть открывающий тэг панель Properties изменится и отобразит атрибуты это го тэга. Найдите в списке атрибут bgcolor, щелкните в его поле и либо непосредственно введите нужный цвет, либо щелкните кноп ку с многоточием и в диалоговом окне Color Picker выберите цвет.

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

96 Глава Корректировать текст в режиме Design весьма удобно, но нередко менять свойства во время работы приложения.

бы увидеть VB-код страницы, в меню View выберите ко манду Code или просто нажмите кнопку F7 — в активной панели отобразится файл.aspx.vb — исходный текст на Visual Basic Программа невелика, и часть ее по умолчанию скры та. Пока не обращайте внимание на эту часть — нас интересует метод (немного переформатированный для ясности):

Private Sub sender As _ e As Handles code to the page here End Sub Я не просто добавил статический текст в Label2, а также текущую дату и время, которые изменяются при каждом обновлении стра ницы. Сразу после комментария, созданного мастером (Put user code to initialize the page here — «Разместите здесь пользователь ский код инициализации я добавил строку инициа лизации страницы:

= "The current date and time is + Данная строка очень похожа на строку Visual Basic, кроме того, понятно, что она Обратите внимание, что для объедине ния строк я использую знак «плюс» а не амперсанд (&). В от личие от Visual Basic и С# в версии Visual Basic нельзя было использовать знак «плюс». В книге для созда ния строки я всегда буду пользоваться этим знаком.

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

Это очень простое приложение, но я что вы получили оп ределенное представление о возможностях IDE Visual Studio Хотя некоторые особенности разработки доступны также и в дру гих средах, в частности в Visual InterDev 6.0, в Visual Studio они реализованы намного лучше. В Visual InterDev 6.0 я практи Основы разработки приложений в чески никогда не режимом конструирования, так как у него есть очень неприятная особенность — он полностью пе реформатирует мой аккуратно отформатированный HTML-текст.

В Visual Studio текста при переключении из в редактор выполняется более «интеллектуально», а некоторые особые параметры большин ством изменений HTML-кода, Studio First Page The date 24:34 AM I Рис. chap04 после внесения изменений Раньше не было некоторых серверных компонентов, например Label. Компоненты-надписи (label) — это лишь верхушка га всего множества серверных элементов управления. В следу ющих главах я к разработке Web-форм в и ис пользованию серверных элементов управления, и даже покажу как создавать пользовательские серверные элементы управ ления.

Другие виды приложений ASP.NET Все рассмотренные ранее примеры, кроме последнего, создан ного в ASP.NET, очень похожи на знакомые После запроса страницы сервер обрабатывает ее код и возвра браузеру результирующий HTML-текст. Даже если бы все новинки в ограничились ASP, связанны ми с производительностью, это бы считалось значитель ным усовершенствованием ASP. Но, как часто говорят в реклам ных роликах: «Подождите, это еще не все!» 98 Глава Кроме приложений, с которыми уже познако мились, разрабатывать еще два вида масш табируемых приложений: Web-сервисы и приложения, ис пользующие среду исполнения HTTP, HTTP-обработчики и HTTP модули.

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

Первый способ — создать служебное приложение, взаимодей ствующее с потребителями функции по особому протоколу на основе TCP/IP. Он не так уж плох, но придется возвести «вави лонскую башню» из соглашений в виде интерфейсов и протоко лов. В каком регистре, верхнем (YES или NO) или нижнем (yes или по), ожидает система подтверждения подлинности кредитной карточки? Какие символы применяются для разделения резуль тата проверки и кода — запятые или тильды (~)?

Через порт передаются данные? Обеспечивает ли систе ма пересылку через брандмауэры? Сможет ли кто-нибудь нить все эти подробности через Второй способ — создать Web-страницу, которая принимает ар гументы в составе URL-адреса, выполняет проверку и возвраща ет результат в виде другой страницы, которую получает запросив шее проверку приложение, а не браузер. Здесь решается пробле ма доступности функции через брандмауэр, но остается откры тым вопрос о нестандартном программном интерфейсе, который потом легко забудется.

Подлинное решение — XML Web-сервисы. Если коротко, это про граммные которые предоставляют приложениям Основы разработки приложений в услуги через Web, а для обмена сообщениями используют язык XML (Extensible Markup (Более подробно об XML Web я расскажу в главе XML Web-сервисы не зависят от среды По не очень-то нужна Windows на и они создаются любыми средствами разработки приложений, поддерживающих протокол SOAP (Simple Object Access (В MSDN интересная «Develop a Web Service: Up and Running with the SOAP Toolkit for Visual Studio», в описы вается создание XML Web-сервиса с помощью SOAP Toolkit и Visual Studio 6.0. Вы найдете ее на Так в чем же причина такого шума вокруг XML Web-сервисов в В простоте их которую обеспечивает среда ASP.NET.

Примечание XML Web-сервисы произведут резо люцию способов доступа к сервисам в Web. Напри мер, на момент этих строк Microsoft и компания eBay объявили о заключении соглашения, которое предусматривает использовать Web-сервисы для интеграции сервисов Micro soft, таких, как Carpoint, bCentral и WebTV, с элект роной торговой площадкой eBay. Подобный альянс вряд ли стал бы возможен без Web-сервисов.

Насколько просто создавать Web-сервисы в В листин ге XML Basic числе код, генерируемый Visual Studio Генерируемый код обрамлен тэгами и Region.

Imports Public Class Inherits ion Web Services Designer Generated Code Public Sub ' Этот необходим для Web Services Designer.

Глава Добавьте свой код после вызова ' End Sub Необходим для Web Designer Private components As ' процедура необходима ' для Web Services ' Ее средствами Web Services Designer.

' He изменяйте его редактора кода.

_ Private Sub components - New End Sub Protected Overloads Overrides Sub Dispose(ByVal disposing As Эта процедура необходима для Web Services Designer ' He изменяйте его редактора кода.

Sub Region ПРИМЕР WEB-СЕРВИСА ' Сервис возвращает строку Hello World.

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

' Перед тестированием Web-сервиса, позаботьтесь, ' чтобы файл начальной страницей и нажмите F5.

Function As String HelloWorld = "Hello End Function End Class Листинг Исходный текст простого XML Web-сервиса «Hello World» Ha puc. показан результат сообщение, которое представлено в виде строки, возвращенной методом класса Конечно, более интересно, Основы разработки приложений в когда сервис получает параметры, их и возвраща ет результат.

World?

?> Рис. Результат вызова Web-сервиса XML «Hello World» (листинг 4-4) XML Web-сервисы открывают мир для при ложений даже самым мелким фирмам, разрабаты вающим программное обеспечение, сервисы в Web, что открывает новые возможности для бизнеса.

и HTTP-модули HTTP-обработчики и HTTP-модули два вида приложений Они чем-то похожи соответственно на и Есть две причины, по которым в ASP об ращаются к расширениям или фильтрам ISAPI:

• достигнут потолок производительности или масштабируемо сти;

• требуется гибкость, которую обеспечивают только расшире или фильтры ISAPI.

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

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

приложений В исходном тексте на Visual Basic в листинге отсутству ет один элемент. Хотя я всегда хвалю режим Option Explicit, здесь я его не использовал. При желании это можно сделать, указав в директиве @ Page. Тем не менее эта страница требует переменных — при преобразовании прило жения из в Visual Basic я пропустил одно упоминание переменной loop — Visual Basic не замедлила с сообщени ем об ошибке (рис Server Error in Application.

Error Please 17: t _ i»:

Рис. Сообщение об ошибке — отсутствует объявление переменной в тексте (листинг 4-3) Данное сообщение об ошибке содержит намного больше инфор мации, чем в том числе строку исходного тек ста, в которой возникла ошибка. Она красным цветом. По умолчанию такое подробное сообщение появляется Основы разработки приложений в только на компьютерах, выполняющих данное приложение. Та кое поведение при ошибке не очень правильно, так как G исход ном тексте могут содержаться имена пользователей и пароли до ступа к базе данных или другие данные.

Но если атрибут Explicit не установлен в true, почему же появля ется сообщение о необъявленной переменной [не вполне пра обозначенной в данном примере как «Expected an exp ression» Причина кроется в файле Он не только задает атрибуты и Strict на каж странице, но позволяет глобально, на уровне всего приложе ния, конфигурировать эти и другие параметры. В листинге 4- показано содержимое файла Web.config.

> Листинг 4-5. Простой файл Web.config, в котором атрибуты explicit и strict установлены в а значит, их не нужно задавать на каждой странице Visual Basic Если вы знакомы с языком XML, то увидите, что листинг 4-5 XML-документ. В главе подробнее расскажу об XML, но вам достаточно знать сле • в отличие от HTML, где разрешается опускать многие закры вающие тэги, в XML обязательно наличие пар открывающих и закрывающих элементов. В некоторых тэгах открывающий и закрывающий элементы можно представлять в виде одно го тэга, например:

/> 104 Глава • XML чувствителен к регистру. Так, следующая пара тэгов не зерна, так как тэг не закрывающим для тэга Хотя s ранних среды разрешалось игнори ровать регистры в атрибутах (например, и считались одинаковыми), начиная с версии Beta 2, конфигурации чувствительны к • значения в XML заключаются з кавычки. Такой тэг неверен:

/> В среде рекомендуется использовать язык но на мо мент написания этой книги редактирования файла не предусмотрено никаких специальных программных админис тративных средств. Это не такая сложная проблема, так как фор мат XML легок для понимания, но вам придется вручную отлажи в обычном редакторе, например в Notepad парно именуемом Notepad первыми разработчиками в Я не рассматриваю все возможные параметры гурации — они описаны в документации на Framework Software Development Kit (SDK), но расскажу о самых важных из них и их роли, а также объясню назначение каждой из частей файла Web.config.

Где хранится файл Web.config Одну из трудностей для ASP-программистов стран ный набор которым обрастает сложный Web-узел.

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

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

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

Допустим, Machine.config содержит следующий раздел (по между тэгами и /> Кроме того, есть виртуальная папка Test, в конфигурационном файле между тэгами и > содержится раздел:

Если этот раздел appSettings — единственный на компьютере, каждая страница, которая получает из этого раздела ключ получает значение кроме страниц приложения Test, Страницы, входящие в приложение Test или в папки, расположен ные логически ниже папки Test, получат значение Внимание! Если эксперименты с реестром кажут ся недостаточно захватывающими и вам захо чется как-то интереснее угробить свой компьютер, попробуйте разделы Web.con fig или Machine.config. Это испортит только приложе ния но зато очень основательно. Возмож следующие платформы будут от 106 Глава носиться более лояльно к подобным но в версии «защиты от дурака» не предусмот рено. Кроме того, начиная с версии Beta все фай лы Web.config чувствительны к регистру. Такое раничение разумным, если учесть, что правильные (well-formed) XML-файлы тельны к регистру, ведь Web.config — это и есть правильные XML-файлы. Тем не менее ность к регистру станет причиной не одного па головной боли.

Никогда не пытайтесь это делать сами!

Допустим, ресурс физически расположен по адресу каталог VirtualDirec указывает на a — на Если открыть файл распо ложенный по адресу его параметры будут сильно отличаться от параметров файла, расположенного по адресу Это происходит, потому что наследование информации о конфигурации от Web.config основано не на иерархии папки, а на логической, определяемой структурой.

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

конфигурации состоят из большого числа разделов.

Далее я опишу разделы в алфавитном порядке, а некоторые даже снабжу примерами.

Раздел authentication Среда ASP.NET несколько способов аутентифика ции пользователя. В качестве примера приведу раздел authen tication Web.config, настроенного для аутентификации на основе форм:

Основы разработки приложений в /> атрибута mode тэга показаны з таб лице Таблица 4-2. Значения атрибута mode Значение Описание Forms Для приема информации приме няется пользовательская форма Windows проверки подлинности пользователя применяется аутентификации Windows Применяется аутентификация на основе Microsoft Passport None Аутентификация не выполняется Аутентификация Windows в среде и з ранних версиях ASP очень похожи. В этом методе применяется встроенная спо собность IIS выполнять аутентификацию пользователей Windows.

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

Для аутентификации на основе Microsoft Passport необходима вне база данных На компьютерах, ющих этот вид необходимо установить Passport SDK. Среда обеспечивает упакозку Passport SDK.

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

Отличия ASP.NET В стандартный метод аутентификации на основе форм заключается в обработчика событий расположенного в файле и го переадресацию из новых сеансов на страницу входа в систему. Этот метод плохо масштабирует так как в ASP состояние сеанса не поддержива ется в рамках фермы Web-серверов. Метод аутен Глава на основе форм обеспечивает чет кий механизм проверки пользователя при входе в систему.

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

При аутентификации на основе форм можно использовать под тэг Его атрибуты перечислены в таблице 4-3.

Таблица 4-3. Атрибуты тэга < forms > Атрибут Описание URL-адрес, на который переадресуются пользовате ли, не прошедшие аутентификацию. Данный мо жет располагаться на же или другом компьютере, но в последнем случае атрибут decryptionKey должен совпадать на обоих компьютерах. decryptionKey атрибут тэга в файле fig Name Имя cookie-файла, который используется для тификации. Если аутентификацию на основе форм несколько приложений на одном компью тере, то этого файла должно отличаться в разных приложениях, В ASP.NET в качестве пути к лу применяется слэш Timeout Задает в минутах до окончания срока действия cookie-файла. Он обновляется по истечении полови ны сроки действия — таким образом, сокращается число предупреждений пользователя о получении co okie, если включен режим уведомления о размеще нии Так как cookie-файл может обнов ляться, текущее значение иногда неточно.

Значит, нельзя полностью на то, что cookie перестанет ровно через интервал времени в секундах, заданный в атрибуте timeout. По значение атрибута Основы разработки приложений в Таблица 4-3.

Атрибут Описание Path Путь к cookie-файлу. По умолчанию здесь установлен слэш Этот атрибут можно задавая чение тэга или программные средства Тип защиты Разрешенные Encryption, None и При значении tion данные cookie-файла проверяются, но не шифру При значении Encryption данные шифруются, но не При значении None не ни то, ни другое. При значении АН (по умолча нию) данные шифруются и проверяются на предмет изменений, возникших во время пересылки. Для всех, кроме самых маловажных данных, имеет смысл ис пользовать значение по умолчанию, пожертвовав не большим снижением производительности Примечание Зачем правильность cookie файлов? Поскольку иногда они позволяют получить доступ к не для об щего доступа, проверка правильности данных cookie и отказ в доступе в случае неверных значений не к примеру, «захватить» чужую виртуаль ную корзину с покупками.

пример на основе форм показан в лис тингах 4-6, 4-7 и В этом несложном примере имя и пароль «жестко» определены в самом коде (листинг 4-6). Также, здесь вводится класс пользовательского интерфейса. В листинге 4-6 отображающая ся на экране кнопка — это не стандартная HTML-кнопка отправки формы, да и вообще — не кнопка, а В главе вы с этими поближе, а пока просто по мне на слово, что они работают именно так, как ожидается, а также что событие инициирует исполнение кода метода (он расположен з части страницы). Детали ра боты метода в листинге 4-6 не так важны, но нас инте ресует вызов метода передаваемый этому методу параметр — имя пользова теля, полученное из свойства — это происходит 110 Глава пока загадочным для вас образом (более подробно о передаче значений из серверных управления я расскажу в гла зе 5). Второй существенно важный параметр (ему присваивает ся значение указывает, что не нужно создавать Import Листинг 4-6. Страница входа в — пример процедуры аутентификации (файл В листинге 4-7 показан еще один скучный пример крайней он станет скучным, когда вы разберетесь, в чем состоит волшебство форм но об этом — в главе 5). Эта форма Глава просто идентифицирует пользователя и разрешает ему из системы.

Import void Src, E ) { = + I void sender, EventArgs E)

/> Листинг Служебная страница в примере аутентификации при выходе из системы (файл В листинге 4-8 показан данного приложения. Это также очень простой файл. Нас интересует раз дел authentication, no сути аналогичный показанному ранее тэгу authentication, а также связанный с ним об этом я расскажу в следующем разделе) тэг authorization.

Примечание Данный файл Web.config должен на ходиться в корне каталога Web-приложения в IIS, a сам каталог следует настроить как каталог приложе а не как Основы разработки приложении в /> /> /> Листинг 4-8. Файл в примере аутентификации Есть еще одна тонкость организации аутентификации на основе форм. Между тэгами можно разместить раздел содержащий информацию об именах и паролях. Например, в раздел authentication файла (листинг 4-8) добавить следующие строки:

Таблица 4-4. Значения атрибута passwordFormat Значение Описание Clear Сохранение открытым текстом. Этот вари ант не обеспечивает никакой защиты, но очень удо бен для тестирования Требует алгоритма SHA (Secure Hash Al gorithm). Пароли в виде 160-битных хе шей в которых устранены проблемы первой версии алгоритма SHA пароли в виде MD5. Это значение гораздо надежнее, чем конт рольная сумма 5 При проверке имени пользователя и пароля с применением фор мы она должна метод Authenticate класса Раздел После аутентификации пользователя иногда требуется рить, разрешено ли ему работать с приложением. Для этого в разделе применяются тэги и з ко торых можно как отдельных так и груп пы, или роли. Как в предыдущем разделе, аутентифи кация Windows позволяет сопоставить ролям группы пользова Windows NT.

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

Вообще говоря, на сайгах, где важна авторизация, отказ в досту пе необходимо «прописать» явно, указав тэг Недостаточная ясность сообщений об ошибках вызывает пробле мы у В среде эти проблемы нены, и здесь сообщения об ошибках более и не редко содержат не только строку, ошибку, но и не сколько и следующих за ней строк. Эта допол нительная информация важна, так как часто ошибка кроется в ошибке на предыдущей строке. На рис. показан пример со об ошибке в В части страницы с сообщением об ошибке расположе но несколько ссылок, полезных для разработчиков. Первая из них — Show Detailed Compiler Output («показать подробную вы ходную информацию При щелчке этой ссылки отображаются сообщения, которые выводились бы при исполь зовании компилятора командной строки. Это если до ошибки сообщения, способные дать ключ к разгадке Вторая ссылка — Show Complete Compilation Source («показать исходный По щелчку Основы разработки в этой ссылки отображается подробный листинг исходного текста, поступивший на вход компилятора при генерации страницы. При переработке исходного текста и получении необходимого создания страницы, простая страница 4-6} «распухает» 400 строк. Понимать этот код не обя зательно, но в некоторых случаях это помогает при отладке при Server Error '/FormsAuth' Error during compilation of specific error Рис. Сообщение об ошибке в ASP.NET Обратите внимание на то, что на странице с сообщениями об ошибке отображается имя пользователя и пароль, требуемые входа в систему! этот пример выдуман и никто не станет использовать такую «систему безопасности» в реальных приложениях, но часто требуется скрыть от другие участки программы, например имена пользователей и пароли в строках к базе данных.

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

Глава Раздел custom Errors файла для разреше ния показа подобных сообщении об ошибках только разработчи кам при создании и тестировании программ, но не пользовате лям. В таблице 4-5 показаны поддерживаемые тэгом < custom Errors Таблица 4-5. Атрибуты тэга Атрибут Значение Описание Задает URL-адрес переадресации Включает, отключает или показывает mode пользовательские сообщения об ошибках только на удаленных клиентах ( Пользовательские сообщения включены Oft Пользовательские сообщения отключены Пользовательские сообщения отображаются только на удаленных клиентах По умолчанию атрибут mode установлен в и страницы с сообщением об ошибке (как на рис. 4-14) удаленные пользовате ли не видят них отображаются страницы с скими сообщениями. Страница, которая по умолчанию показывается удаленным пользователям, в предназначена толь ко разработчикам. В поясняется, как просмотреть подробную информацию об ошибке, изменив раздел Web.config. Определение атрибута позволяет, к при меру, переадресовать пользователей на страницу, которая ляет администратора сайта об ошибке.

Также используется подчиненный тэг тэга причем его можно указывать несколько раз. В таблице 4-6 пере числены два атрибута, которые поддерживает подтэг Таблица Атрибуты подтэга Атрибут Описание Задает код ошибки, который переадресует браузер на нестандартную страницу с сообщением об ошибке Основы разработки приложений в Таблица Атрибут Описание redirect Задает страницу для переадресации при возникновении ошибки, определенной в атрибуте Раздел Этот раздел сопоставляет входящие запросы классу или в зависимости от запрошенного адреса и HTTP-команды.

Примечание Под HTTP командами (HTTP verbs) подразумеваются ключевые определяющие действия Web-сервера. Если вы занимаетесь HTML вам знакомы HTML-команды POST и GET. В HTML-формах это значения атрибута method тэга Если задано значение все зна чения формы добавляются к URL-адресу, оп ределенному в атрибуте action. А если указано зна чение данные полей формы отсылаются в теле HTTP-сообщения. между ними в том, что при использовании все элементы отсылаемые в составе URL-адреса, могут содержать которую «показывать» не следует (например, имя пользователя и пароль).

Свойство POST предпочтительнее, но на практике обычно перекладывают ре шение этих вопросов на саму среду. В главе 5 вы узнаете, что в большинстве тэгов форм просто ис пользуется пара «атрибут — значение» Раздел httpHandlers задает HTTP-обработчики, которые используются в приложениях, и порядок их Данный раздел поддерживает три —, и Чтобы определить, к какому обработчику попадет посту запрос, просматриваются все каталоги более высоких а не физические) и все и HTTP-модуль, помещенный на лее высокий уровень подтэгом может удалять подтэг на более низком уровне.

Глава Подтэг добавляет Как видно из табли цы 4-7, он поддерживает три атрибута.

Таблица 4-7. Атрибуты подтэга в разделе httpHandlers Атрибут Описание Список HTTP-команд, разделенных например PUT, POST, символом «звездочка» (*) path URL-путь просто строка со знаками подстановки, на пример type Комбинация Сборка — это груп па логически для удобства работы с ними. Сначала среда проводит поиск в папке bin данного приложения, а затем — в системном кэше сборок Подтэг удаляет HTTP-обработчик, определенный ра нее в подтэге в долж ны точно соответствовать команде/пути, заданным з предшеству подтэге добавление и удаление НТТР-обра ботчикоз может показаться глупым, не что конфигурации просматриваются от корня к текущей папке (по логическим папкам, а не физическим), поэтому разумно ожидать, что на каком-то этапе обработчик, необходимый на более ком уровне, не потребуется приложениям, расположенным ниже Подтэг поддерживает два атрибута: verb и совпадающие с атрибутами подтэга Последний поддерживаемый подтэг в разделе httpHandlers — Если он задан, наследуемые или настроенные сопо ставления HTTP-обработчиков Вот простой пример раздела httpHandlers:

/> Здесь все HTTP-команды, обращенные к nepeagpe в класс MyApp.New сборки MyApp, а все HTTP-команды, адресованные MyApp.Baz, передаются классу MyApp.Baz сборки Основы разработки приложений в Раздел Раздел содержит информацию, по добную содержащейся в описанном ранее разделе Он также поддерживает три подтэга:

. Как видно из таблицы 4-8, подтэг ет два атрибута: type и пате.

Таблица 4-8. Атрибуты подтэга в httpModules Атрибут Описание type Определяет комбинацию в эле менты разделены запятыми. Среда выполняет поиск в папке bin данного а затем в систем ном кэше сборок пате Задает имя, используемое приложением для ссылки на модуль, заданный в атрибуте type Подтэг работает так же, как его брат-близнец в раз деле httpHandlers. Атрибуты type и используются выбора ранее Подтэг удаляет из приложения определенные ранее HTTP-модули.

Раздел Identity Раздел identity Web.config управляет идентификационны ми данными Web-приложения. Этот раздел позволяет определить олицетворение (impersonation) — использование идентификато ра пользователя с клиентского компьютера для доступа к на сервере. Допустим, что на Web-сервере в интрасети два каталога: Employees и Managers (руко водители). Если все пользователи работают в Windows и имеют учетные записи домена Windows 2000, а оба располо жены на Web-сервере на томе NTFS, то предотвратить доступ рядовых сотрудников к папке Managers можно не средствами логики приложения, а применив файловые разреше NTFS папки Managers. Для этого разрешение на доступ к папке Managers предоставляется только руководителям.

Как видно из таблицы 4-9, тэг поддерживает три ат рибута.

Глава тэга identity > Атрибут Параметр impersonate используется или нет ворение клиента при всех запросах Разрешает олицетворение клиента False Запрещает олицетворение клиента (по имя пользователя, которое приме няется, если атрибут impersonate лен password Задает пароль, который используется, если атрибут impersonate установлен в Раздел pages файла Web.config содержит информацию, присущую только странице. Она настраивается на уровне компью тера, сайта, приложения или папки. Как из таблицы тэг поддерживает шесть атрибутов.

Таблица Атрибуты < pages > Атрибут Значение Описание buffer Определяет, ли буферизация ответов с определенного URL-адреса true Буферизация включена false Буферизация ответов отключена enable- Определяет, поддерживается ли состояние сеанса true сеанса поддерживается сеанса не поддерживается Readonly Данные о состоянии сеанса доступны для просмотра, но не для записи enable- разрешен ли просмотр состо страницы (состояния ее элементов управления) Просмотр разрешен false Просмотр отключен Задает CodeBehind-класс, которому насле дуют Основы разработки приложений в Таблица 4-10.

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

Отличия ASP.NET ASP-разработчики привыкли к тому, что при выходе, за рамками определенного сервера состояние теряется, и его нельзя сохранить с применением стандартной определения состояния. Проблема в том, что в ASP состояние сеанса сохраняется на самом Web-серве ре. В кластерной среде Web-фермы нельзя сделать так, чтобы запросы от конкретного клиента попада ли на один, вполне определенный Web-сервер кла стера. решения этой проблемы в ASP использу ется трюк, который в сохранении час ти состояния сеанса в зашифрованных лах, а затем использовании их для доступа к базе данных и получения остальной информации о сеан се. обходной путь — применение идентифи Глава катора сеанса, который передается от страницы к и требуется для доступа к базе данных с информацией о сеансах. В среде не надо использовать обходные пути. Состояние сеанса можно сохранить на сервере или в базе данных SQL сервера. В разделе «Раздел session я расскажу об этом поподробнее.

Раздел processModel Этот раздел управляет параметрами модели на Web-сервере Он отличается от смотренных тем, что его считывает неуправляемая DLL библиотека а не система уп равляемого кода. 8 processModel много параметров, вли яющих не производительность системы.

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

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

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

Основы разработки приложений в значение атрибута равно 7, запустятся только три процесса (подробности — в таблице Таблица 4-11. Атрибуты тэга > Атрибут Значение Описание enable включена ли поддержка модели процессов True Поддержка модели процессов включена Поддержка модели процессов отключена timeout Задает в минутах время до запуска сре дой рабочего процесса, который место текущего. По умолчанию значение атрибута — infinite (бесконечность) Задает в минутах рабо чего процесса до его остановки средой По умолчанию значение атри бута (бесконечность) shutdown Timeout Задает в минутах время, рабочему процессу для самостоятельно го Если по истечении этого времени рабочий процесс не завер шается, его закрывает Фор мат времени — а значения по умолчанию — 0:00: Задает запросов до того, автоматически заместит теку щий рабочий процесс новым. По умол чанию значение атрибута (бесконечность) Задает число запросов в очереди до того, как запустит рабо чий процесс и переназначит запросы.

Значение по умолчанию Задает максимальный памяти в процентах от общего памяти си стемы, выделяемый рабочему процессу до того, как запустит новый процесс и переназначит запросы. Значение по умолчанию только число, знак процен та (см. стр.) Глава Таблица Атрибут Значение Описание Задает битовую маску, на каких процессорах в системе разрешено испол процессы На компьюте рах с четырьмя процессорами бинарное значение (десятичное 7) означает, что процессоры с номерами из диапа зона исполняют процессы ASP.NET, а процессор 3 — нет. Этот атрибут ра совместно с атрибутом Совместно с атрибутом cpuMask ляет (affinity) процессоров.

Система с несколькими процессорами называется Web-садом (Web garden), возможно, по аналогии с кластером ПК, часто называемым Web-фермой Определяет, что управления про цессорами следует использовать подси стему Windows (no умолчанию) False Определяет, что процессоры, исполня ющие код ASP.NET, задаются атрибутом Задает учетную запись, используемую рабочими процессами. По умолчанию процессы применяют учетную запись Задает пароль для записи, определенной в атрибуте userName Определяет типы событий, регистриру емых в журнале АИ В журнале регистрируются все события процессов None Никакие события процессов не рируются в журнале Errors В журнале регистрируются только ошиб ки, в том числе нештатное выключение компьютера, выключение из-за превы шения предела памяти или имной блокировки потоков. Это значе ние по умолчанию Основы разработки приложений в Таблица 4-11.

Атрибут Значение Описание Задает время ожидания запроса в оче реди до следующей проверки клиента «на так как часто поль зователь не дожидается загрузки стра ницы и переходит на следующую Задает уровень аутентификации в под системе безопасности DCOM. Допусти мые значения: Default, None, Connect (по умолчанию), Pkt, Pktlntegrity и Задает уровень олицетворения в подси стеме безопасности СОМ. Допустимые Impersonate u Delegate. (В данный мо мент значение Anonymous не поддержи Задает максимальное количество рабо чих потоков в процессе в расчете на один процессор. Значение по нию — 00 Задает число потоков ввода/вывода процесса в расчете на один процессор. Значение по умолча нию Раздел В обеспечивается гораздо более обширная и гибкая под держка сеансов, чем з ASP. Для разработчиков неболь ших в Интернете или интрасети поддер жки вполне хватало. Проблема в том, что состояние ASP-сеанса не масштабируется — его нельзя распро странить на несколько Web-серверов. В ASP состояние сеанса хра нилось на Web-сервере, и поэтому при использовании кластеров, например, на базе службы сетевой (Network Load Balancing) не было гарантии, что запросы определен ного клиента будет обслуживать один и тот же Web-сервер класте ра. Другое ограничение состояния сеанса в ASP — необходимость использования cookie-файлов. Это требование — не такое уж устранимое препятствие, так как сегодня практически все браузе 126 Глава поддерживают и, кроме 8 абсолютном большинстве требуется поддержка cookie-файлов, и это заста (ну разве что за исключением отпетых параноиков) сми риться с использованием хотя бы временных Раздел файла со стояния Как видно из таблицы 4-12, тэг поддерживает пять атрибутов.

Таблица Атрибуты тэга sessionState > Атрибут Значение Описание Задает место информации о сеансов Off не fnproc Состояние сеансов хранится как в ASP StateServer Состояние сеансов на удален ном сервере Состояние сеансов хранится на SQL-сервере Определяет, должны ли применяться клиентские при сохране нии состояния True При сохранении сеанса при cookie-файлы False сохранении сеанса не применяются timeout Задает время в минутах отсутствия активности сеанса, по истечении кото рого он закрывается. Значение по умолчанию — 20 минут (как в ASP) Задает имя сервера и порта, на кото ром удаленно состояние сеан са (например, Этот атрибут необходимо задать, если атри бут mode установлен в StateServer Задает строку подключения к SQL-сер веру, на котором требуется хранить стояние сеанса (например, data Этот атрибут необходимо если атрибут mode установлен в StateServer Основы разработки приложений в В то же минимизации количества сохраняемых в что и в ASP.

Раздел trace В ASP сложность для разработчиков заключалась в труд ности получения отладочной информации. Что имен но происходило на странице, когда возникла ошибка? уча сток исходного текста исполнялся? В предусмотрен го раздо более механизм предоставления отладочной информации, а раздел trace файла позволяет задать параметры службы На показана страни ца, исполняемая со включенной трассировкой и атрибутом установленным в true.

In* Л Login Page Persistent Cookie: г Status Cads:

Encoding: Unicode Response Encoding: (UTF 0. Begin С End 0. ' Begin 0 Рис. Результат файла Login.aspx (листинг 4-6) при включенной трассировке и атрибуте установленном в Как видно таблицы тэг поддерживает пять ат рибутов.

Глава Таблица 4-13. тэга > Атрибут Значение Описание трассировка True Трассировка False Трассировка отключена (по умолчанию) сколько трасси ровки на сервере. Значе ние по умолчанию отображается ли информация в конце страницы True Трассировочная информация добавля на каждую страницу False Трассировочная информация не добав ляется (по умолчанию) Задает порядок трассиро вочной информации Трассировочная информация сортиру ется по то есть в порядке никновения событий (по умолчанию) Трассировка отображается по Category ям, расположенным в алфавитном по рядке, Подробнее о пользовательских категория рассказано далее в этом раз деле facalOnfy доступен ли просмотр трассировки со всех клиентов или толь ко с Web-сервера True Просмотр трассировки возможен толь ко в консоли сервера умолчанию) False Просмотр трассировки возможен не только на Web-сервере, но с клиента На рис. все сведения принадлежат к катего рии aspx.page. генерируется автоматически средой а в исходном тексте страницы нет никаких трасси ровочных инструкций. Но это только часть возможностей трасси ровки в среде что страница в систему Основы разработки приложений в из листинга 4-6 не так, как ожидается. Возможно, дело в том, что следующий участок программы работает неверно:

if == == !

else { = "Invalid Credentials: Please try again";

Класс Trace позволяет добавить пользовательские операторы трассировки:

if == { } else i = "Invalid Credentials: Please try again";

"Invalid \ Если данные и открыть страницу (листинг указав неверные пользователя и пароль, в списке трассиро сообщений появится строка в категории MyCategory (рис. 4-16).

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

130 Глава of Request: I -Определенная пользователем информация Рис. 4-16. Трассировка с явным образом Заключение Важно не забывать, что so многих случаях значения по умолча нию работают На самом деле большинства описанных разделов в нет, так как достаточ но значений по умолчанию. Кроме того, такие средства, как Visual Studio особым образом трактуют некоторые из этих поэтому поведение по умолчанию в Visual Studio подчас несколько отличается от описанного по умолча нию в Пользователи Visual Studio заметят и другие существенные чего не скажешь о тех, кто пользуется редактором, не имеющим отношения к В целом, большин ство примеров в дальнейших главах сделаны в Studio но при этом особое внимание я уделяю «магическим которые предоставляет Visual Studio Среда Visual Studio поддерживает весьма полезные вещи, но понимание того, что происходит «за помогает в случаях, когда поведение Visual Studio отличается от желаемого.

Основы разработки приложений в Сейчас знаете достаточно, чтобы к главе 5, в кото рой я расскажу о наиболее важном виде приложений ASP.NET Web-формах. Они предоставляют программистам ASP.NET воз можности (Rapid Application Development — быстрая разработка приложений) для разработки серверных приложений, о которой ASP-программистам приходится только мечтать. Меч та стала и в главе 5 вы узнаете, как заставить ее работать!

Глава Наиболее общая задача динамических — полу чение их обработка и вывод предупреждения в случае обнаружения ошибок. В HTML предус мотрено много управления, в том числе текстовые списки, списки флажки и переключате ли, а также обычные кнопки и кнопки отправки данных. Поддер жка форм в HTML — тот фундамент, на котором в ASP строится система дополнительной обработки и проверки входных данных.

Проверка входных данных в HTML-формах от анало гичной процедуры обычных формах Microsoft Windows. Например, значение введенное в поле, кото рое предназначено для даты, некорректно. В отличие от приложе Microsoft Visual Basic 6.0 или на основе Windows-форм в не предусмотрен удобный способ создания поля для по в которых некорректные данные отбрасываются авто матически. В также нет аналога дартного элемента Windows, автоматически обеспечи вающего корректность всех элементов даты — года, месяца и дня.

Примечание на локальном уровне вы применять JavaScript для управления данны Web-формы, и предотвращения некорректных вариантов вроде даты 5/35/2001, но обычно в так не делают. Разра использующие ASP, как создают линию обороны: основную проверку на стороне клиента с применением JavaScript, и на слу чай, если проверка на стороне клиента неэффектив на из-за того что браузер не поддерживает нужных функций, на стороне сервера выполняется дополни тельная Web-формы Классическая архитектура Так как в ASP практически встроенная поддержка проверки правильности входных данных, разработчикам прихо дится рассчитывать только на свои силы. Зачастую даже в од ной группе разработчиков применяются разные способы ния и проверки вводимой пользователем информации. Я вынуж ден что даже в исходном тексте одного разра ботчика иногда используются несколько способов проверки правильности входных данных. За примером далеко ходить не надо — я один из таких разработчиков.

В каждой HTML-форме в атрибуте action тэга указан определенный в абсолютном (начинается с префик са или относительном формате (имя файла в текущем ката логе). Относительный URL-адрес иногда начинается с символа «наклонная черта» тогда поиск ведется от корневого каталога текущего Web-узла. При отправке формы ее данные передаются по URL-адресу, указанному в атрибуте action тэга На рис. 5-1 и 5-2 показаны схемы двух наиболее популярных в ASP способов проверки правильности вводимых данных.

Страница с Отправка ли введенные страницы Да перенаправить на другую страницу AcceptData.asp Рис. Первый способ проверки правильности входных формы Вообще форма может и не содержать атрибут В этом чае к серверу в процессе ее обработки применяется адрес самой формы. — Прим.

134 Глава Default.asp J Страница страница Отправка страницы Да на другую страницу Рис. 5-2. Второй способ проверки правильности входных данных формы На схеме на рис. 5-1 в форме на странице Default.asp атрибут action тэга < FORM> указывает на AcceptData.asp. Задача Accept — проверить корректность данных формы и либо воз вратить пользователя на Default.asp, если обнаружена ошибка в данных, либо вывести информационное сообщение, либо пере направить пользователя на другую страницу.

На рис. 5-2 action тэга указывает на Default.asp.

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

Существует несколько способов решения задачи, но я пред почитаю использовать скрытое поле формы У каждой из схем 5-1 и рис. 5-2) есть преимущества, но мне больше нравиться способ, показанный на рис. 5-2. то есть ряд причин:

• вся логика управления сосредоточена в одном мес те. Это удобно, если возникает необходимость добавить или удалить элемент управления;

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

• в случае ошибки переданные данные не нужно восстанавли вать для перенаправления на исходную страницу.

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

Проверка входных данных в структуриро вана гораздо лучше, чем в ASP. Цель создания — при менить (Rapid Application Development — «быстрая разработка приложений») к программированию части.

Эта в значительной степени достигнута.

Отличия ASP.NET В ASP.NET предусмотрены более богатые возможности вводимых пользо вателем чем в но для полноценного их применения следует придерживаться пока занной на рис. 5-2, согласно которой страница от правляет данные самой себе. Вы вправе попробо вать другой способ, но это вряд ли вам понравится, так как придется плыть а не по главному те чению ASP.NET. Как говаривал один из героев «Звез дных войн»: «Используй Люк!» Формы ASP.NET и Visual Basic 6. Большая часть этой посвящена сравнению «класси ческого» и Отличия рази Глава Еще заметнее они в методах создания форм при переходе от Visual Basic 6.0 к причем неважно, что вы в конечном итоге выберете — Visual Basic или Некоторые вещи, которые просто и легко в традиционных приложениях Visual Basic, существенно слож нее сделать в модели форм среды Например, в традиционных приложениях очень часто используется изме нение содержимого элементов управления при переходе между ними. Я работал над приложением, в котором пользо ватель выбирал тип оборудования из списка. После выхода списка выбора типа оборудования из фокуса раскрывающийся список с перечнем устройств из менялся — в нем оставались только соответствующие выб ранному типу наименования. Изменение элементов управ ления «на лету» не очень рекомендуется в формах так как при изменении содержимого элемента управления обычно требуется дополнительное обращение к серверу.

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

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

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

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

Public Property tries() As Integer Get Return End Get Value As Integer) = End Set End Property Когда применяется свойство, вы напрямую обращаетесь к в коде на Visual Basic но на самом деле значение считываться и сохраняться в ViewState, Путаницу усугубляет то, что некоторые значения между обращениями к серверу. По умолчанию в автоматически сохраняются значения, введенные элементы управления, и свойства на странице элементов управления.

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

Import

color=blue>Login Page

/>

/> Password:

Web-формы runat=server />
Листинг Страница аутентификации пользователя Login.aspx имеет много общего как с обычной так и с В начале страницы распола гается инструкция import для импорта пространства имен Как на 2страницу Login.aspx пользователи при первом посещении Web узла — это определено в конфигурационном Web.config.

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

Отличия ASP.NET В ASP-програм один из способов от дельных функций заключался в использовании вы 140 Глава include. В поддерживается жение импортировать про странства имен. Однако реализация в отличие от не допускает символов подстановки, то нельзя импортировать и затем титься к пространству имен За начальным тэгом следует блок сценария, тэгами и Блок сценария содержит одну функцию на языке С#. Она сравнивает значения, по лученные из формы, с жестко определенными в коде значениями и либо использует метод для возвращения пользователя на изначально запрошенную стра ницу, либо отображает надписи формы текст, в котором пользо предлагается повторить попытку.

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

В теле страницы (обрамленной тэгами и ) форма начинается с тэга В отличие от тэга в обычном HTML или ASP, здесь указывается единственный ат которому присваивается значение «server». He указано, какой метод использовать get, а также отсут ствует атрибут в котором указывается страница, которую следует вызывать при отправке формы. В ASP.NET форма со зна чением «server» в атрибуте всегда отправляет данные себе. При программировании на «классическом» ASP атрибут Web-формы не используется в таком контексте, но знают, что он в блоках сценариев. В атри бут runat применяется во многих HTML-тэгах, и его наличие все гда что для обработки соответствующего компонен та требуется обращение к серверу.

Форма содержит большое количество обычного HTML-кода, в том числе таблицы и текстовые поля ввода. V последних есть одна незнакомая особенность — все та же пара «атрибут — значение» которая в тэге Серверные элементы управления в ASP.NET и в HTML В листинге 5-1 вы наверняка заметили несколько незнакомых тэгов. Все они начинаются с сочетания после которого следует текст — в одних местах знакомый или а в других — нет Так обо значаются серверные элементы управления ASP.NET. Они выпол няются на сервере и отчасти похожи на HTML-элементы управ ления со значением server G атрибуте runat. Элементы управле ния с атрибутом runat способны вызывать серверные функции.

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

На то есть несколько причин. Во-первых, для некоторых элемен тов управления не существует аналогов в «чистом» HTML. Очень просто построить серверный HTML-элемент типа «поле ввода» или «кнопка» с помощью стандартного тэга HTML и пары но для элемента управления вроде в HTML нет аналога. Однако, прежде чем погрузить ся в изучение я познакомлю вас с основ ными различиями между двумя типами серверных элементов управления — HTML и ASP.NET.

Серверные HTML-элементы управления обладают следующими особенностями:

• имеющаяся объектная модель позволяет программно манипу лировать элементами управления;

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

Глава • события на стороне клиента, на стороне или одновременно и и там. Обработка событии и на стороне и на стороне сервера может показаться но на то есть серьезных причин. О распределении по обработке между сервером и клиентом я расскажу в главе 7;

• автоматическое сохранение значений между обращениями к серверу. Например, текст, указанный в поле ввода, остается в нем и после отпразки данных;

• взаимодействие с элементами управления, проверяющими правильность вводимых данных, — о нем я расскажу позже — в разделе «Элементы управления проверки правиль ности вводимых данных»;

• привязка данных к одному или нескольким свойствам элемен та управления;

• поддержка таблиц HTML 4.0 при условии поддержки их браузером;

• сквозные пользовательские атрибуты — к серверному элемен ту управления HTML можно добавлять атрибуты, а среда Framework читает и отображает их без изменения функцио нальности.

Серверные элементы управления в обеспечивают такие же возможности, а также кое-что еще. Однако между серверны ми элементами ASP.N и HTML нет однозначного соответствия.

(Например, для элемента управления нет стандартного аналога в HTML.) Серверные элементы управления обладают следующими особенностями:

• модель обеспечивает контроль типов при программировании;

• определение браузера. Элементы управления определяют возможности браузера и генерируют для клиента код;

• изменение внешнего вида и поведения некоторых элементов управления с помощью шаблонов (Вниманию на языке это не те шаблоны, которые вы Web-формы • для некоторых элементов управления можно задать кэширо вание их событии до отправки данных формы или немедлен ную отправку событий на сервер;

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

На странице (листинг 5-1} присутствуют серверные элементы управления и HTML, и В этой книге в боль шинстве примеров применяются серверные элементы управле ния Программистам, привыкшим к работе на со строгим контролем типов, например С и C++, удобнее пользо серверными элементами управления так как в них применяется модель с контролем типов.

Элементы управления проверки правильности вводимых данных Первый элемент с которым я познакомлю вас в этом разделе, — RequiredFieldValidator. Посмотрите на его иерархию классов (рис. 5-3). Как вы знаете, в Framework общим для всех предком и нет ничего удивительного в том, что RequiredFieldValidator — его дальний потомок.

Рис. 5-3. Иерархия классов для RequiredFieldValidator в Framework Глава Элемент управления Чтобы лучше понять эту иерархию, следует разобраться с тем, как работает Этот элемент управления приме няется з программе (листинг На рис. 5-4 показа на страница после отправки обоих незаполненных по Login Page Password:

Рис. 5-4. после нажатия кнопки Login при незаполненных полях V элементов управления проверки правильности данных имеется атрибут В нашем примере его значение состоит из символа (*). Таким если в поле введены некорректные данные, рядом с ним отображается «звез дочка». — практически простой мент из входные данные;

он указано ли 8 поле хоть что-нибудь. Так как же работает элемент управле ния проверки данных? Его работа определяется несколькими об стоятельствами. Как часто бывает при работе с ASP.NET, чтобы разобраться, каким образом запрос элемента управления провер ки входных данных преобразуется в нечто, понятное браузеру, полезно взглянуть на HTML-код, который попадает в браузер. В листинге 5-2 приведен HTML-код, который отправляется браузеру до срабатывания элементов управления, проверяющих данные (для удобства чтения листинг Web-формы />

Листинг 5-2. передаваемый браузеру при запросе до срабатывания элементов управления проверки данных Примечание Обратите внимание: в листинге 5- есть необычное скрытое поле VIEWSTATE. Оно для хранения информации о состоянии элементов управления между обращениями к серве ру. Не надо его трогать. Его создатели чтобы вы не смогли его изменить к примеру, под менить информацию о состоянии другого пользова теля.

Ого, сколько кода! Понятно, почему блок сценария на рас положенный в начале листинга отсутствует з листинге 5-2, он отмечен как на Однако блок Этот фрагмент кода выглядит совсем незнакомым! в консоль Internet Information Services (рис. 5-5), вы увидите, что каталог, на который указывает атрибут src При проверки на стороне клиента осознавать, что, как правило, языки клиентской и серверной проверок раз Это может стать источником определенных ошибок. На пример, ли к регистру проверка строки как на сер вере, так и на клиенте? Чтобы ответить на этот вопрос, нужно знать оба языка программирования.

Несколько элементов управления, проверяющих одно поле Если открыть страницу ValidatorTest.aspx (листинг в браузере и щелкнуть кнопку Validate, вы показанную на рис. 5-8.

Validator Test Page Range Regular Expression (It wants you to enter THE QUOTES):

Рис. 5-8. которая открывается по щелчку кнопки Validate при незаполненных полях ввода Web-формы Обратите внимание на сообщение о корректности страницы «Page Valid». Но это не то, что нам нужно! Первое поле должно быть числом из диапазона а второе похожей на номер социального страхования, а значение последнего дол жно равняться строке «Hello». Однако что ни один из проверочных элементов управления, кроме не проверку «пустых» Должен же быть выход.

Первое решение — использование элемента управления Re В листинге 5-5 показана модифицированная версия ValidatorTestRequired.aspx файла ValidatorTest.aspx. Здесь к каждому контролируемому другим элементом проверки корректности, добавляется элемент управления

Validator Test Page - Required Entry

Email:

Глава

font size:

Range Validation (1-12):

"Enter a valid U.S. SSN RequiredFieldValidator enter a />

/>

runat=server /> of Range" /> a value."

/>

Regular Expression Web-формы size=11 />
Custom (It wants you to enter "Hello" WITHOUT THE QUOTES):

> Enter "Hello". Case-Sensitive.

Глава enter a value."

/>

Листинг 5-5. Страница Validator на которой требуется заполнять все поля данными Один из которых мы до сих пор не рассматривали, это Он может принимать одно трех значений Static или Dynamic. Если Display в None, сообщение об ошибке не Если атрибут равен при сообщения об ошибке структура страницы не изменяется, так как содержимое элемента проверки физически является частью стра и для него всегда отводится место. При установке атрибу та Display в Dynamic сообщения не занимают место на странице, пока не «срабатывают». В листинге 5-5 я устанавливаю атрибут Display всех элементов управления равным Dynamic. У этого зна чения есть неприятный побочный эффект — изменение внешне го вида страницы при срабатывании проверочных элементов управления. Если определить значение равным Static, этого не произойдет. Например, после изменения значения этого Web-формы та на Static для элемента u страницы с незаполненным полем Range я получил страницу, которая пока зана на рис. 5-9.

Validator Test Page - Entry Range (1-12):

enter a Expression Validation Must a value Custom Validation (It wants to enter WITHOUT THE QUOTES):

Рис. 5-9. Результат установки атрибута Display в Static в элементе управления, проверяющем содержимое поля С первым элементом проверки (не сработавшим) связано сооб щение об ошибке «Out of Range» (выход за пределы разрешен ного диапазона). На рис. 5-9 видно свободное место между по лем ввода и началом строки enter a где размещает невидимая строка «Out of Range». Имея исходный HTML-код мы можем посмотреть, чем браузер при отображении страницы. Далее приведен возвращен ный браузеру HTML-код для строки таблицы, в которой находит ся элемент проверки диапазона. (Для облегчения чтения HTML текст отформатирован.)

170 Глава
Custom Validation (It wants you to "Hello" WITHOUT THE QUOTES):

Range Validation (1-12):

runat=server /> /> /> Regular Expression Validation Web-формы Expression" ValidationExpression= /> Expression" />
> Custom />
HeaderText= "You must enter a value in the following
Листинг 5-6. Страница ValidatorTestSummary.aspx, на которой демонстрируется применение элемента управления Validation Summary На рис. 5-10 приведена возвращенная после щелчка кнопки Validate при незаполненных полях.

Web-формы Validator Test Page - Summary Validation Validation (It wants you to "Hello" ВДТНОЩ THE must the Рис. 5-10. Отчет обо всех обнаруженных отображаемый после отправки формы на странице ValidatorTestSummary.aspx с пустыми полями Самое важное изменение з листинге 5-6 элемент добавленный в конце страницы под кноп кой и надписью;

must enter a value in the following я познакомлю вас с атрибутами элемента управления назначение которых не очевидно из их назва ний. Атрибут указывает, как отображать сообщения об ошибках. Допустимые значения являются частью перечисле ия • об ошибке выводятся в виде марки рованного списка;

• List — сообщения об ошибке в виде списка;

• — все сообщения об ошибках выводятся в одном абзаце.

Глава Атрибут способен принимать True или False и определяет, должен ли отчет об ошибках в HTML. В этом примере не показан атрибут ко торый применяется для отображения отчета в информационном окне. Он также принимает значения True или False. В атрибуте указывается текст заголовка отчета об ошибках.

Другие (листинг 5-6) от (листинг 5-5) заключаются том, что атрибу ты Display всех проверочных элементов ны в а текст об ошибке содержит понятное пользователю название проверяемого элемента управления та ким образом, что в сочетании со значением атрибута HeaderText становится осмысленным.

Сохранение информации о состоянии элементов управления в ASP.NET В «классическом» ASP-коде обработки формы для проверки кор ректности введенных данных обычно требуется писать много кода. Вторая задача, которая требует создавать объемный код, сохранение информации о состоянии элементов управления меж ду отправками формы, HTTP не поддерживает состояния и не обеспечивает постоянных, длительных Каждое обращение к серверу рассматривается как новый запрос, и хотя в Framework создается иллюзия сеансов, иллюзия все рав но остается Нет подключения, и по умолчанию сервер ничего не помнит о клиенте между отправ ками При создании форм для просмотра и редактирования информа ции в базе данных на «классических» ASP-страницах я обычно назначаю следующую для сохране ния информации о состоянии.

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

2. Если форма выводится не в первый раз, проверить входные данные. Если они корректны, сохранить их и перенаправить на следующую страницу. Если входные данные неверны, к шагу 3.

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

5. Отобразить форму. Во всех элементах управления, в которых это присвоить атрибутам value значения из соот локальных переменных, значение которых опре делено на шаге 3 или 4.

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

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

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

В при отправке формы сохранение информации о со стоянии элементов управления берет на себя Framework. Для этого не требуется никакого дополнительного программирования или конфигурирования. После отправки и последующего отобра жения формы предыдущие значения автоматически становятся значениями по умолчанию. в листинге 5-7 показано содержимое простой формы StateTest.aspx.

Import Page

colspan=

/>

Name:

runat=server size=30 /> enter name."

/>

SSN:

size=11 /> "Enter a valid U.S. SSN Web-формы runat=server /> "Enter a valid U.S. SSN ValidationExpression= />
Листинг 5-7. В файле StateTest.aspx демонстрируется сохранение введенных в форму значений между обращениями к серверу Примечание В листинге используется Visual Basic а не структура не и хотя функция, вызываемая при нажатии кнопки Vali date, называется причиной такой схемы именования является мое же лание. Обработчики события в таком формате часто генерирует Visual Studio но в Framework автоматически созданных имен придерживаться не обязательно.

180 Глава В форме размещены проверочные элементы управления полей Name (имя пользователя) и SSN (номер социального стра хования). Если ввести имя не придирается к именам) и неправильный номер социального страхования (в нашем слу чае — вместо отображается страни ца, показанная на рис. причем введенные ранее значения являются значениями по умолчанию при повторном отображении формы, Control Test Page - State Name:

SSN:

РИС. 5-11. Результат отправки при заполненном поле Name и неправильно введенном номере социального страхования Примечание Для того чтобы в примере State Test.aspx не выполнялась проверка на стороне кли я использовал пару «атрибут - значение» благодаря чему страница всегда обращается к серверу. Об этом свидетель ствует сообщение в нижней части страницы о ее некорректности is InValid) -- это сообщение создается методом, выполняющимся на стороне сервера.

Web-формы Программное управление серверными элементами управления Кроме уже рассмотренных элементов всем осталь ным стандартным элементам HTML серверные элементы управления HTML ASP, том числе;

• (тэг <А>);

• • • • Checkbox;

• Синтаксис серверных элементов управления HTML не отличает ся от синтаксиса стандартных элементов управления HTML за исключением пары мелких • если необходимо программно управлять элементами управле ния и их необходимо определить значение атри бута • атрибут следует установить в Чаще всего серверные элементы управления ASP создаются так же, как элементы управления HTML, но опять же с определенными ис ключениями. Во-первых, для создания всех серверных элементов ASP применяется тэг вида Кро ме того, некоторые свойства элементов управления ASP больше похожи на свойства традиционных элементов управления в Visual Basic, чем в HTML. Яркий пример такого элемента управления Первое, что в глаза — название В HTML это был бы тэг INPUT с атрибутом Туре, установ ленным в Text. При изучении его свойств параллели с Visual Basic еще очевиднее. Атрибут, имевший в HTML название здесь называется Text.

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

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

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

Элемент управления Calendar гораздо сложнее. До сих пор при разработке Web-приложений разработчикам приходится отказы ваться от очень полезного стандартного элемента управления Конечно, для достижения того же фекта можно использовать элемент управления ActiveX, выпол няющийся на стороне клиента, но в большинстве случаев разра ботки Интернет-приложении этот подход себя не оправдывает.

Задачу выбора даты решает элемент управления Calendar, который преобразуется в HTML-код.

Атрибуты этого элемента управления слишком многочисленны, чтобы их здесь, кроме того, они хорошо описаны в документации MSDN. Код Calendar выглядит примерно так:

Web-формы элемента управления Calendar, например Width, Height u нет необходимости В этом примере между открывающим и тэгом размещается подчиненный тэг TodayDayStyle — он в каком виде отображается текущая дата. На день у этого подтэга имеется более допустимых элементов, в том числе атрибуты и а также о шрифте. Использование атрибутов для указания множества ментов достаточно утомительно. К счастью, при использовании среды разработки Visual Studio эти атрибуты устанавлива ются в окне Properties, точно таком к какому привыкли про граммисты на Visual Basic. Кроме того, значения отдельных атри бутов можно изменять программно.

Файлы программной логики, или Все предыдущие примеры в основном создавались в редак торе Notepad (Блокнот), который, конечно же, ничего не зна ет о Framework. Большинство следующих примеров (в том числе WebForml.aspx) создавались в Studio Одно из отличий ASP от — местоположение кода. В ASP код должен находиться в ASP-файле или подклю чаться к нему. В исповедуется другой принцип. В код располагается в отдель ном файле, который в с общепринятыми согла шениями WebForml как это код на Visual Basic Это файл логики страницы, так называемый Если бы в примере вместо Visual Basic использовался получил бы название WebForml Возможность удобного разделения логики программы и представления очень важна в группах, где дизай неры и разработчики работают в разных командах.

В оставшейся части этого раздела описывается пример Control В нем используются четыре серверных элемента управления управ ление которыми осуществляется программными методами. В 184 Глава листинге 5-8 показано содержимое файла.aspx, назна чение которого — страницы в браузере. Позже я познакомлю вас с содержимым этой страницы.

aspx.

Visual 7.0" Basic 7.0" Explorer 5.0"

Other Web-формы Листинг 5-8. — файл представления созданный Visual Studio В листинге 5-9 реализована программ логика на Visual Basic. WebFormI со стра представления WebFormI Public Class WebFormI Inherits Protected WithEvents As Calendar Protected WithEvents As Protected WithEvents As Label Protected WithEvents As WithEvents As TextBox ttRegion Web Form Generated Code необходим для Web Designer.

_ Private Sub InitializeComponent() End Sub Глава Private Sub sender As e As Handles 'CODEGEN: Вызов этого метода необходим Web Designer его редактора кода.

End Sub Region Private Sub sender As ByVal e As Handles здесь пользовательский код страницы If Page. = False Then = = = "7/24/2001" = False = "Hello" End If End Sub Sub Selection_Change(ByVal sender As ByVal e As EventArgs) Dim s As String s = = End Sub End Class Листинг 5-9. — CodeBehind-файл для демонстрирующий программное управление элементами управления;

на Visual Basic Первое отличие листинга 5-8 от предыдущих примеров заключа ется в директиве Page Атрибуты и характерны для Visual Studio из них практически всегда равен False. Если установить этот атрибут в True или вообще опустить, обработчик события с именем будет автоматически связываться с событием страницы Использование AutoEventWireup лось уместным в момент его создания, но на практике этот атри бут иногда порождает путаницу. Многие разработчики, пользо вавшиеся ранними бета-версиями жаловались, что при случайном подключении событий вручную совместно с опреде ленным атрибутом AutoEventWireup выполнялись два вызова события вместо требуемого Visual Studio ет Codebehind на этапе проектирования, а в Framework этот атрибут В в которых Visual Studio не используется, часто для указания выполняющегося на этой странице кода применяют атрибут 5гс директивы Page.

содержит ряд тэгов вставленных Visual Studio Эти HTML-элементы содержат невидимую для пользователя информацию о полезную как серверу, так и клиенту. Поисковые машины часто учитывают информацию з тэгах <МЕТА> при индексации страниц. Остальной код листин га 5-8 совпадает с предыдущими примерами: в нем определяют ся элементы Заголовочная надпись «приук рашена» прерывистой и фоновым цветом, но осталь ные элементы управления созданы с применением минимума атрибутов.

В начале листинга 5-9.aspx.vb) показано откры тие класса:

Public Class WebForml Inherits Protected As Calendar Protected WithEvents As Protected WithEvents As Label Protected WithEvents As Protected WithEvents As TextBox Глава класс описан и объявлен как наследник System.Web.UI.P3ge. (Самую подробную о вы найдете в MSDN.) Затем четыре элемента управ ления, а именно tabel2, и Все они объявлены серверными элементами управления в (листинг 5-8), а здесь их применение вызвано необходимостью управлять ими из программы. Для объявления этих элементов уп равления используется ключевое слово Visual Basic то есть эти объекты реагируют на события, инициируемые их эк приписанными к переменным. Все серверные эле менты управления ASP расположены в пространстве имен tem. Web.

В листинге 5-9 сразу за переменными-экземплярами располага ется следующая загадочная строка:

Web Form Generated Code Код между этой и строкой ниже, по умолчанию скрыт при редактировании кода в Visual Studio Программисты на Visual C + +, пользующиеся MFC и ATL, хорошо с подобным разработки кодом, но программисты на Visual Basic могут его и не знать.

Примечание Программисты на Microsoft Visual C + + безусловно с фрагментами кода, под держку которых берет на себе среда разработки. Со временем многие даже научились вручную менять эти строки, хотя, конечно же, это не рекомендует ся. В программах на Visual Basic нет кода, доступно го программиста, но на самом деле го средой разработки. В языке Visual Basic в код определенные «секретные» строки, но разработчики их не видели. В модели во всех поддерживаемых Visual Studio языках отсут ствуют «секретные ингредиенты». Видны все ки кода — даже не предназначенные для изменения программистом. Сейчас просто не обращайте вни мания на фрагменты, помеченные строкой «Web Form Designer Code». Автоматичес ки созданный код в листинге 5-9 достаточно но в других примерах он гораздо сложнее.

Так как Visual Studio зарезервировала событие для собственных нам придется найти другое место для кода, выполняющегося в начале обработки. Конечно же, такое место — это событие класса Page позволяет определить, в первый ли раз отображается форма.

Жизненный цикл Web-формы в ASP.NET Жизненный цикл в ASP.NET состоит из пяти основных этапов:

• — при этом событии каркас страницы ASP.NET свойства элементов и от правленные то есть данные, введенные пользо до отправки формы;

Ш при этом событии выполняются начальные операции отображении страницы в первый раз) либо восстанавливаются данные в элементах управления (если страница отображается после обращения к серве ру);

Ш Проверка данных (Validation) сервер ных элементов управления ASP.NET для про верки данных в элементах управления;

Ш Обработка прочих — различные элементы равления инициируют самые разнообразные события.

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

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

После загрузки страницы возможны два сценария развития в зависимости от того, отображается страница s первый раз или нет. За обработку двух возможных вариантов отвечает обработчик события Private Sub Page_Load(ElyVal sender As e As Handles код страницы = False Then = = System. Red = "7/24/2001" = False "Hello" End If End Sub В этом примере обработка выполняется, только равно False, то есть страница отображается в пер раз и форма не заполнена. В этом случае страница но некоторые свойства элемента управления в том числе свойство и стового поля. В элементе управления Calendar устанавливаются свойства и С помощью TodaysDate текущая дата для элемента управле ния, возможно, отличающаяся от системной даты на сервере или клиенте. Эти простые примеры определения — только вершина айсберга по сравнению со всеми возможностями про граммного управления компонентами.

На рис. показан результат обработки при запросе страницы.aspx.

Web-формы Рис. 5-12. Страница с датой TodaysDate) 4 июля, определенной в коде В коде 5-9} кнопка-ссылка заблокиро — это видно на рис. Однако, свойство Text вво да, расположенного прямо под в методе ус тановлено равным «Hello». На рис. в поле содержит ся текст «7/4/2001» — выделенная дата. Как это произошло?

Дело 8 коде метода (листинг Sub sender As Object, e As Dim s As String s = = End Sub Атрибут элемента управления Calendar уста новлен в Этот метод вызывается на сервере при каждом изменении выделения. Он просто меняет поля ввода Text и записывает туда дату, указанную в элементе управления Calendar.

Глава даты и многофункциональный каркас На примере демонстрируется модели среды Обратите я при своил промежуточной переменной 5 возвращен методом SelectedDate. Поначалу воз никли определенные трудности, Когда я выбирал дату 4 года, вместо текста «7/4/2001», в поле отображалось «7/4/2001 AM». Чтобы получить толь ко дату, без мне пришлось воспользоваться мето дом Substring. Вывести дату можно и другим способом: вме сто в использовать аргумент Sender, передаваемый обработчику события:

Sub Selection_Change(ByVal sender As Object, e As EventArgs) Dim с As Calendar Try с = c.

Catch End End Sub Вначале sender приводится к Calendar. Этот код помещен блок обработки так как при использовании этого обработчика для обработки других не связанных с календарем, произойдет ошибка.

После создания объекта Calendar из строки с датой исключается время посредством метода В ме тоде Catch никакой обработки не происходит, ведь этот об работчик предназначен только для объекта Calendar, и если объект не относится (или не приводится) к этому типу, ни чего делать не надо.

При создании проекта Web Application в Visual Studio создается множество вспомогательных На рис. по казаны файлы, созданные для примера ControlShowAndTell.

со Рис. 5-13. созданные Visual Studio для примера В листинге 5-10 показано содержимое для примера ControlShowAndTell. Этот файл содержит элементы кода, в определенной степени похожие на обработчики событий из з «классическом» ASP.

Imports Public Class Global Inherits Component Designer Generated Code Public Sub вызов необходим Component операции по инициализации выполняются вызова InitializeComponentO End Sub Component Private components As Глава Эта процедура необходима Component Designer можно модифицировать Component Designer.

модифицируйте ее средствами редактора кода, _ Private Sub components = New End Sub ttEnd Region Sub sender As Object, _ e As EventArgs) в начале каждого запроса End Sub Sub Application_AuthenticateRequest(ByVal sender As Object, _ ByVal e As ' Срабатывает при попытке доступ End Sub Sub Application_Error(ByVal sender As Object, _ ByVal e As EventArgs) ' Срабатывает при возникновении ошибки End Sub End Class Листинг 5-Ю. Файл Global.asax.vb, созданный средой Visual Studio Global.asax.vb также содержит фрагмент кода, созданный разработки. При просмотре в Visual Studio он по умолчанию скрыт.

При компиляции или запуске проекта Visual Studio создает ся каталог bin, о котором располагается файл скомпилированный вариант Web.aspx.vb, а также отладочный файл.

в составе Visual Studio 6.0, позволяет выяснить, что зависит лишь от DLL библиотеки -- Mscoree.dll, в которой содержится большинство функций Framework.

Web-формы Заключение Вы изучили основные «строительные Web-форм и узна как их для перенесения RAD-методов на север, Несмотря на сравнительную простоту примеров, мощь вполне очевидна. При создании удается «вынести за скобки» всю «черновую работу», которую приходи лось выполнять на каждой странице, и уделить больше внимания особенностям ваших страниц.

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

Что делать, если описанных в этой главе элементов управления не хватает для воплощения задуманного? Об элементах управле ния, поддерживающих взаимодействие с базами данных, я рас скажу в главе 9, но что, если нужно хитрым образом чуть изме нить стандартное поведение компонента? Разработке собствен ных компонентов посвящена глава 6. Несмотря на то, что почти во всех приведенных примерах использовалась только Framework, при разработке собственных элементов управления используются особенности двух основных языков программиро вания в — Visual Basic и Глава Создание Одна из причин беспрецедентного немного даже неожидан ного) успеха Microsoft Visual Basic — возможность его расшире ния за счет добавления на что прежних версиях языка (до Visual Basic не были реализо ваны в мере преимущества объектно-ориентированного программирования, Basic сразу же занял лидирующую по* поскольку не только Microsoft, но и другие компании по лучили возможность разрабатывать свои и уже готовые компоненты.

В начале главы я познакомлю вас с как сегодня обсто ят дела с уже созданными компонентами. Далее вы как в решаются многие проблемы, с которыми сталкивают ся разработчики СОМ-компонентов в среде Active Server Pages (ASP). Я расскажу о классах элементов управления в и о жизненном цикле элементов управления В заключение речь пойдет о внешней и «изнаночной» сторонах создания и фун кционирования пользовательских и нестандартных элементов уп равления в ASP.NET.

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

Однажды для создания шифрованных RTF-файлов я воспользо вался приобретенным у стороннего поставщика элементом управ ления для обработки текста. Две первых версии этого элемента прекрасно работали с шифрования, которая обра батывала текст фрагментами по 2048 (это обуславли валось ограничениями на использование памяти в Microsoft Windows). V меня не было особых проблем, связанных с этим ограничением, поскольку от элемента управления я полу чал текст с символами конца строки в месте каждого разрыва строки (обозначаемого RTF-тегом Все шло хорошо, пока я не перешел на третью версию этого элемента управления. И тут вдруг все рухнуло!

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

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

Новый элемент управления текстом должным образом обеспе чивал тот же самый интерфейс, и тем не менее он нарушал ра 198 Глава боту моего кода. Трудно описать мои когда мне при шлось к предыдущей элемента управления, пока я не догадался изменить размер буфера в программе шиф рования!

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

• привязка к версии может нарушить работу существующего при ложения при использовании новой версии СОМ-компонента;

• должны надлежащим образом прописы в реестре;

• трудно развернуть новый СОМ-компонент во работы существующего компонента;

• разработка и отладка СОМ-компонентов — очень процесс.

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

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

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

Допустим, я работаю с компьютерным кластером из четырех При появлении новой версии сначала следует чем отличается поведение и прежней версии, и только после этого составлять план дальней действий. Если разработчики нового компонента заявляют, что он совместим с существующим СОМ-компонентом и изме нения связаны только с исправлением найденных ошибок, то все, что требуется, — это вывести сервер из кластера, остановить соответствующие службы [как правило, это и Component Services и установить новый компонент.

Затем компьютер обратно подключается к кластеру, и настраи вается сервер.

А что если обновление включает не только исправление ошибки, но и добавление новых функций? Тогда оно существенно услож няется. Если новые функции требуют изменить ASP-код, вызы вающий этот компонент, мне придется сначала пройти по всем серверам и заменить сам компонент, а затем пройти еще раз, чтобы на каждом сервере внести изменения в ASP-код. Но и в этой схеме возможны подводные камни. Допустим, один запрос к Web-серверу попадает на компьютер, который уже настроен на новые функции компонента, а следующий запрос, учитывающий новую конфигурацию компонента, попадает на сервер, в котором ASP-код еще не исправлен. Неполадка практически га рантирована. Эта лазейка для неприятностей не очень страшна на кластере из четырех серверов, но если у вас кластер больших размеров, головная боль гарантирована.

в сочетании с некоторыми другими службами, являющи мися частью Framework, выполнить этот переход более гладко. (Найдите в MSDN информацию о Microsoft Appli cation Center — службе, которая помогает выполнять подобные обновления.) Что касается самих компонентов, то компо ненты копируются поверх прежних и пользова тели, подключенные к версии, могут не беспокоиться, а следующие запросы получат уже обновленные компоненты.

200 нечно, и есть проблемы, но копирования го компонента без остановки таких служб, как IIS и Component Services (Службы уже можно считать огромным шагом И, четвертая с трудностью процес са разработки и отладки Хотя разработка СОМ-компонентов в Visual Basic существенно чем в С+ она no-прежнему остается весьма сложной процедурой — гораз до более сложной, чем следовало бы. Отладка СОМ-компонен тов, вызываемых ASP-страницей, хотя и но очень силь но отличается от отладки ASP-сценариев.

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

Но сначала разберем, из чего «сделаны» компоненты ASP.NET.

Pages:     | 1 || 3 | 4 |   ...   | 5 |



© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.