ГГУ им. Ф. Скорины

http://www.gsu.by

Разработка Web-приложений ASP .NET с использованием
Visual Studio .NET

1. Лекция: Принципы работы и структура
Web-приложений на основе ASP.NET: версия для печати и PDA

Рассматривается архитектура современных
Web-приложений, взаимодействие клиентской и серверной частей таких
приложений, принципы их организации в среде ASP.NET

Цель лекции: познакомиться с архитектурой и
особенностями организации Web-приложений, особенностями архитектуры
ASP.NET и .NET Framework, принципами взаимодействия клиента и
сервера при выполнении Web-приложения на основе ASP.NET.

Архитектура Web-приложений

Web-приложения представляют
собой особый тип программ, построенных по архитектуре
"клиент-сервер". Особенность их заключается в том, что само
Web-приложение находится и выполняется на сервере - клиент при этом
получает только результаты работы. Работа приложения основывается на
получении запросов от пользователя (клиента), их обработке и выдачи
результата. Передача запросов и результатов их обработки происходит
через Интернет (рис.
1.1).

Рис. 1.1.  Архитектура
Web-приложения

Отображением результатов запросов, а также приемом данных
от клиента и их передачей на сервер обычно занимается специальное
приложение — браузер (Internet Expolrer, Mozilla, Opera и т. д.).
Как известно, одной из функций браузера является отображение данных,
полученных из Интернета, в виде страницы, описанной на языке HTML,
следовательно, результат, передаваемый сервером клиенту, должен быть
представлен на этом языке.

На стороне сервера Web-приложение выполняется специальным
программным обеспечением (Web-сервером), который и принимает запросы
клиентов, обрабатывает их, формирует ответ в виде страницы,
описанной на языке HTML, и передает его клиенту. Одним из таких
Web-серверов является Internet Information Services (IIS) компании
Microsoft. Это единственный Web-сервер, который способен выполнять
Web-приложения, созданные с использованием технологии ASP.NET.

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

За счет наличия исполняемой части, Web-приложения
способны выполнять практически те же операции, что и обычные
Windows-приложения, с тем лишь ограничением, что код исполняется на
сервере, в качестве интерфейса системы выступает браузер, а в
качестве среды, посредством которой происходит обмен данными, —
Интернет. К наиболее типичным операциям, выполняемым
Web-приложениями, относятся:

прием данных от пользователя и сохранение их на сервере;

выполнение различных действий по запросу пользователя:
извлечение данных из базы данных (БД), добавление, удаление,
изменение данных в БД, проведение сложных вычислений;

аутентифицирование пользователя и отображение интерфейса
системы, соответствующего данному пользователю;

отображение постоянно изменяющейся оперативной информации и т.
д.

Краткое описание архитектуры ASP.NET и .NET Framework

ASP.NET — это платформа для создания Web-приложений и
Web-сервисов, работающих под управлением IIS. Сегодня существуют
другие технологии, позволяющие создавать Web-приложения. К ним
относятся прежде всего, очень популярные сегодня языки PHP и PERL,
более старая и менее популярная технология CGI и т. д. Однако
ASP.NET отличается от них высокой степенью интеграции с серверными
продуктами, а также с инструментами Microsoft для разработки доступа
к данным и обеспечения безопасности. Кроме того, ASP.NET позволяет
разрабатывать Web- и Windows-приложения, используя очень похожие
технологические цепочки, одинаковые языки программирования,
технологии доступа к данным и т. д. Более того, базовые языки
программирования, с помощью которых сегодня возможна разработка
Web-приложений, являются полностью объектно-ориентированными, что
делает разработку исполнимой части, а также ее модификацию,
обслуживание, отладку и повторное использование гораздо более
простым занятием, чем в других технологиях. Существует достаточно
большой перечень сильных сторон использования ASP.NET для создания
сложных Web-приложений. Целью данного курса не является описание
всех сильных и слабых сторон этой платформы. Более подробно об этом
можно узнать на сайте http://www.intuit.ru/department/internet/aspnetvsnet/1/www.microsoft.com,
а также в [1].

Заметим лишь, что ASP.NET функционирует исключительно на
серверах Windows, так как требует наличия IIS. Для создания
Web-приложений, не требующих IIS, а использующих, например,
Web-сервер Apache и работающих на серверах под управлением
операционных систем, отличных от Windows, применяются другие
технологии.

Важным моментом в понимании архитектуры ASP.NET является
тот факт, что она является частью инфраструктуры .NET Framework.
Более подробно об архитектуре и принципах работы .NET Framework
можно узнать в [2]. Так как эта тема является слишком объемной и
выходит за рамки данного курса, ограничимся лишь кратким описанием
инфраструктуры .NET Framework.

Архитектура .NET Framework

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

набор языков, куда
входят С# и Visual Basic .NET; набор инструментальных средств
разработки, в том числе Visual Studio .NET; обширная библиотека
классов для построения Web-служб и приложений, работающих в Windows
и в Интернете; а также среда выполнения программ CLR (Common Language Runtime — общеязыковая среда
выполнения), в которой выполняются объекты, построенные на этой
платформе;

набор серверов .NET Enterprise
Servers, ранее известных под именами SQL Server 2000,
Exchange 2000, BizTalk 2000 и др., которые предоставляют
специализированные функциональные возможности для обращения к
реляционным базам данных, использования электронной почты, оказания
коммерческих услуг "бизнес-бизнес" (В2В) и т. д.;

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

новые некомпьютерные
устройства, поддерживающие средства .NET, — от сотовых
телефонов до игровых приставок.

Microsoft .NET поддерживает не только языковую
независимость, но и языковую интеграцию. Это означает, что
разработчик может наследовать от классов, обрабатывать исключения и
использовать преимущества полиморфизма при одновременной работе с
несколькими языками. Платформа .NET
Framework предоставляет такую возможность с помощью
спецификации CTS (Common Type System —
общая система типов), которая полностью описывает все типы данных,
поддерживаемые средой выполнения, определяет, как одни типы данных
могут взаимодействовать с другими и как они будут представлены в
формате метаданных .NET. Например, в .NET любая сущность является
объектом какого-нибудь класса, производного от корневого класса
System.Object. Спецификация CTS поддерживает такие общие понятия,
как классы, делегаты (с поддержкой обратных вызовов), ссылочные и
размерные типы.

Важно понимать, что не во всех языках программирования
.NET обязательно должны поддерживаться все типы данных, которые
определены в CTS. Спецификация CLS (Common Language Specification —
общая языковая спецификация) устанавливает основные правила,
определяющие законы, которым должны следовать все языки: ключевые
слова, типы, примитивные типы, перегрузки методов и т. п.
Спецификация CLS определяет минимальные требования, предъявляемые к
языку платформы .NET. Компиляторы, удовлетворяющие этой
спецификации, создают объекты, способные взаимодействовать друг с
другом. Любой язык, соответствующий требованиям CLS, может
использовать все возможности библиотеки FCL (Framework Class Library
— библиотека классов платформы). CLS позволяет и разработчикам, и
поставщикам, и производителям программного обеспечения не выходить
за пределы общего набора правил для языков, компиляторов и типов
данных.

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

четыре официальных языка: С#, VB.NET, Managed C++ (управляемый
C++) и JScript .NET;

объектно-ориентированную среду CLR (Common
Language Runtime), совместно используемую этими языками для
создания приложений под Windows и для Internet;

ряд связанных между собой библиотек классов под общим именем
FCL (Framework Class Library).

Отношения архитектурных компонентов платформы .NET
Framework с концептуальной точки зрения представлены на рис.
1.2.

Рис. 1.2.  Архитектура
.NET Framework

Самым важным компонентом платформы .NET Framework
является CLR (Common Language Runtime),
предоставляющая среду, в которой выполняются программы. Главная ее
роль заключается в том, чтобы обнаруживать и загружать типы .NET и
производить управление ими в соответствии с полученными командами.
CLR включает в себя виртуальную машину, во многих отношениях
аналогичную виртуальной машине Java. На верхнем уровне среда
активизирует объекты, производит проверку безопасности, размещает
объекты в памяти, выполняет их, а также запускает сборщик
мусора.

Под сборкой мусора понимается освобождение памяти,
занятой объектами, которые стали бесполезными и не используются в
дальнейшей работе приложения. В ряде языков программирования
(например, C/C++) память освобождает сам программист, в явной форме
отдавая команды как на создание, так и на удаление объекта. В этом
есть своя логика — "я тебя породил, я тебя и убью". Однако в CLR
задача сборки мусора (и другие вопросы, связанные с использованием
памяти) решается в нужное время и в нужном месте исполнительной
средой, ответственной за выполнение вычислений.

На рис.
1.2 над уровнем CLR находится набор базовых классов платформы,
над ним расположены слой классов данных и XML, а также слой классов
для создания Web-служб (Web Services), Web- и Windows-приложений
(Web Forms и Windows Forms). Собранные воедино, эти классы известны
под общим именем FCL (Framework Class Library). Это одна из самых
больших библиотек классов в истории программирования. Она открывает
доступ к системным функциям, включая и те, что прежде были доступны
только через API Windows, а также к прикладным функциям для
Web-разработки (ASP.NET), доступа к данным (ADO.NET), обеспечения
безопасности и удаленного управления. Имея в своем составе более
4000 классов, библиотека FCL способствует быстрой разработке
настольных, клиент-серверных и других приложений и Web-служб.

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

Над этим уровнем находится уровень классов, которые
расширяют базовые классы с целью обеспечения управления данными и
XML. Классы данных позволяют реализовать управление информацией,
хранящейся в серверных базах данных. В число этих классов входят
классы SQL (Structured Query Language, язык структурированных
запросов), дающие программисту возможность обращаться к
долговременным хранилищам данных через стандартный интерфейс SQL.
Кроме того, набор классов, называемый ADO.NET, позволяет оперировать
постоянными данными. Платформа .NET Framework поддерживает также
целый ряд классов, позволяющих манипулировать XML-данными и
выполнять поиск и преобразования XML.

Базовые классы, классы данных и XML расширяются
классами, предназначенными для построения приложений на основе трех
различных технологий: Web Services (Web-службы), Web Forms
(Web-формы) и Windows Forms (Windows-формы). Web-службы включают в
себя ряд классов, поддерживающих разработку облегченных
распределяемых компонентов, которые могут работать даже с
брандмауэрами и программами трансляции сетевых адресов (NAT).
Поскольку Web-службы применяют в качестве базовых протоколов связи
стандартные протоколы HTTP и SOAP, эти компоненты поддерживают в
киберпространстве подход "Plug & Play".

Инструментальные средства Web Forms и Windows Forms
позволяют применять технику RAD (Rapid Application Development —
быстрая разработка приложений) для построения Web- и
Windows-приложений. Эта техника сводится к перетаскиванию элементов
управления с панели инструментов на форму, двойному щелчку по
элементу и написанию кода, который обрабатывает события, связанные с
этим элементом.

Компиляция и язык MSIL

.NET-приложения исполняются иначе, чем традиционные
Windows-приложения. Такие программы компилируются фактически в два
этапа. На первом этапе исходный код компилируется во время
построения проекта и вместо исполняемого файла с машинными кодами
получается сборка2)
(assembly), содержащая команды промежуточного языка MSIL (Microsoft Intermediate Language —
промежуточный язык Microsoft). Код IL сохраняется в файле на
диске. При этом файлы MSIL (сокращенно IL), генерируемые
компилятором, например, С#, идентичны IL-файлам, генерируемым
компиляторами с других языков .NET. В этом смысле платформа остается
в неведении относительно языка. Самой важной характеристикой среды
CLR является то, что она общая;
одна среда выполняет как программы, написанные на С#, так и
программы на языке VB.NET.

Второй этап компиляции наступает непосредственно перед
фактическим выполнением страницы. На этом этапе CLR транслирует
промежуточный код IL в низкоуровневый собственный машинный код,
выполняемый процессором. Процесс происходит следующим образом: при
выполнении .NET-программы системы CLR активизирует JIT-компилятор,
который затем превращает MSIL во внутренний код процессора. Этот
этап известен как оперативная компиляция "точно к нужному
моменту" (Just-In-Time) или JIT-компиляция (JIT'ing), и он
проходит одинаково для всех приложений .NET (включая, например,
приложения Windows). При исполнении программы CLR берет на себя
управление памятью, контроль типов и решает за приложение ряд других
задач. На рис.
1.3 показан этот двухэтапный процесс компиляции.

Рис. 1.3.  Схема
компиляции .NET-приложения

Стандартный JIT-компилятор работает по запросу. Когда вызывается тот или иной
метод, JIT-компилятор анализирует IL-код и производит
высокоэффективный машинный код, выполняемый очень быстро.
JIT-компилятор достаточно интеллектуален, чтобы распознать, был ли
код уже скомпилирован, поэтому во время выполнения программы
компиляция происходит лишь при необходимости. По ходу своего
выполнения .NET-программа работает все быстрее и быстрее, так как
повторно используется уже скомпилированный код.

Спецификация CLS подразумевает, что все языки платформы
.NET генерируют очень похожий IL-код. Кроме того, при компилировании
программы в дополнение к MSIL формируется еще один компонент —
метаданные. Они описывают данные, используемые программой, и это
позволяет коду взаимодействовать с другим кодом. В результате
объекты, созданные на одном языке, доступны и могут наследоваться на
другом. То есть можно создать базовый класс на языке VB.NET, а
производный от него класс — на языке С#.

В целом при написании приложения создается так
называемый управляемый код (managed code), который выполняется под
контролем среды исполнения CLR-приложения, не зависящей от языка.
Поскольку приложение запускается под контролем CLR, управляемый код
должен соответствовать определенным требованиям (т. е. компилятор
должен создать MSIL-файл, предназначенный для CLR, а также
использовать библиотеки .Net Framework3)),
при выполнении которых он получает множество преимуществ, включая
современное управление памятью, способность совмещать языки, высокий
уровень безопасности передачи данных, поддержку контроля версии и
понятный способ взаимодействия компонентов программного
обеспечения4).

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

Конечно, компиляция не будет столь полезна, если ее
выполнение будет необходимо каждый раз при запросе пользователем
Web-страницы. К счастью, приложения ASP.NET не нужно компилировать
всякий раз при запросе Web-страницы или Web-службы. Вместо этого код
IL создается один раз и повторно генерируется только при изменении
исходного кода. Подобным образом файлы собственного машинного кода
кэшируются в системном каталоге с путем вроде С:\[WinDir]\Microsoft.NET\
Framework\[Version]\Temporary ASP.NET Files, где WinDir является каталогом Windows, a Version — номером установленной в данный
момент версии .NET.

Архитектура ASP.NET

Каждое Web-приложение, разрабатываемое на основе ASP.NET
состоит из информационной части, программного кода и сведений о
конфигурации.

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

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

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

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

На рис.
1.4 представлен пример простейшей страницы Web-приложения,
содержащего всего лишь один элемент — кнопку. Как видно из рисунка,
основой страницы является тело стандартного HTML-документа, внутри
которого находится элемент form, а также кнопка button. Кроме того,
в начале документа здесь присутствуют некоторые дополнительные
элементы, которые будут рассмотрены позднее.

увеличить изображение
Рис. 1.4.
Пример простейшей страницы Web-приложения

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

Рис. 1.5.  Отображение
страницы Web-приложения в окне браузера

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

Рис. 1.6.  Файл,
содержащий программный код Web-страницы

На самом деле при разработке Web-приложений на основе
ASP.NET возможны два варианта организации Web-форм.

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

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

В примере, рассмотренном ранее, Web-страница разделена
на две части, при этом форма и программный код хранятся в разных
файлах.

В следующем примере, изображенном на рис.
1.7, показана аналогичная предыдущей Web-страница, в которой
форма и программный код объединены в одном файле.

увеличить изображение
Рис. 1.7.
Пример Web-формы, содержащей описание формы и программный код в
одном файле

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

Рис. 1.8.  Типовой
сценарий взаимодействия элементов Web-приложения с клиентом

Как видно из рис.
1.8, при обращении клиента к Web-приложению последнее
запускается на сервере IIS. Запущенное приложение формирует отклик.
Для этого на сервере создается экземпляр запрошенной Web-формы, она
генерирует HTML-текст отклика, который и передается браузеру
клиента. Сразу после этого экземпляр Web-формы уничтожается.
Пользователь, получив HTML-страницу, сгенерированную приложением,
имеет возможность заполнять различные поля формы (тестовые поля,
переключатели и т. п.). После заполнения всех необходимых полей
формы пользователь инициирует отправку данных, введенных им в
страницу, обратно на сервер. Это происходит за счет использования
технологии обратной отсылки, которая вызывается при выполнении
определенных действий (например, нажатия на кнопку). Получив данные
от пользователя, сервер создает новый экземпляр Web-формы, заполняет
его полученными данными и обрабатывает все необходимые события. По
окончании обработки сервер формирует HTML-код ответа и отправляет
его клиенту, а затем уничтожает экземпляр Web-формы. Более подробно
описанный сценарий изображен на рис. 1.9
и 1.10.

Рис. 1.9.  Подробный
сценарий взаимодействия элементов Web-приложения с клиентом при
первом запросе

Рис. 1.10.  Подробный
сценарий взаимодействия элементов Web-приложения с клиентом при
запросе обратной отсылки

В момент окончания работы с Web-приложением пользователь
либо закрывает браузер, либо переходит на другую интернет-страницу.
В этот момент завершается сеанс работы пользователя с данным
приложением, однако само приложение может быть завершено сервером не
сразу после окончания последнего сеанса работы пользователя. Это
связано с управлением распределением памяти платформой .NET
Framework, которая основана на периодической проверке ссылок
объектов. Если в результате такой проверки обнаружится, что объект
больше не используется, сервер уничтожает его, освобождая таким
образом занимаемую им память. Поэтому нельзя точно сказать, когда
именно наступит событие Application_End
для данного Web-приложения.

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

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

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

После этого инициируется событие Page_Load. Большинство Web-страниц используют
это событие для выполнения инициализации, например, заполнения полей
данными, установки начальных значений для элементов управления и т.
д. Кроме того, в процедуре обработки данного события возможно
определение того, была ли загружена страница впервые или обращение к
ней осуществляется повторно в рамках технологии обратной отсылки,
произошедшей в результате нажатия пользователем кнопки либо другого
элемента управления, размещенного на странице. В английской
терминологии обратная отсылка данных на сервер называется post back. Для определения текущего состояния
страницы необходимо проверить свойство Page.IsPostBack, которое будет иметь значение
false при первом запуске страницы.
Определение того, производится ли первое обращение к данной странице
либо повторное, важно, так как позволяет производить инициализацию
только в том случае, когда страница запрашивается впервые. Так,
например, при обратной отсылке данных на сервер не только нет
необходимости производить инициализацию, устанавливая начальные
значения элементов управления, но это даже может быть ошибкой, так
как эти элементы управления должны получить значения, переданные им
от пользователя. В дальнейшем, в случае, если для страницы была
произведена обратная отсылка, вызываются события элементов
управления, размещенных на странице. Эти события запоминаются в тот
момент, когда пользователь производил действия с элементами
управления в окне браузера, а при передаче данных на сервер
исполняются по порядку.

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

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

Пусть у нас существует страница с кнопкой (Button) "Отправить" и текстовым полем (TextBox) без автоматической обратной отсылки.
При изменении текста в текстовом поле и щелчке на кнопке "Отправить"
инициируется обратная отправка данных страницы на сервер (этого не
произошло при изменении текста в текстовом поле, так как
соответствующая опция этого элемента управления AutoPostBack установлена в false). В момент обратной отправки страницы на
сервер ASP.NET запускает следующие события:

Page.Init

Page.Load

TextBox.TextChanged

Button.Click

Page.PreRender

Page.Unload

В результате обработки всех инициированных событий
генерируется HTML-код страницы, который и передается клиенту, после
чего выполняется очистка, в рамках которой инициируется событие
Page_Unload. Оно предназначено для
освобождения ресурсов, занятых данной страницей. Событие Page.PreRender инициируется после того, как
сервер обработал все события страницы, но генерация ее HTML-кода еще
не произошла. Обычно это событие используется ASP.NET для привязки
элементов управления к источникам данных непосредственно перед
созданием HTML-кода и отправкой его клиенту.

Описанная последовательность событий позволяет создать
описание жизненного цикла Web-страницы, изображенного на рис.
1.11.

Рис. 1.11.  Жизненный
цикл страницы ASP.NET

Вернемся, однако, к проблеме сохранения данных страницы
в промежутке между обращениями к ней. Для реализации этого механизма
в ASP.NET используются состояния отображения (view state). Состояние отображения Web-формы
доступно только внутри этой Web-формы. Если необходимо сделать
данные, введенные в Web-форму, доступными другим Web-формам одного и
того же приложения, эти данные необходимо сохранить в объектах с
более глобальной областью видимости, которые называют переменными
состояния. Объектов переменных состояний два: Application и Session. Переменные состояния Application доступны всем пользователям
приложения и могут рассматриваться как глобальные переменные,
обращение к которым возможно из любых сеансов. Переменные состояния
Session доступны только в рамках одного
сеанса, и поэтому они оказываются доступными только одному
пользователю. В переменных состояния можно хранить данные любого
типа. В силу того, что переменные состояния фактически являются
глобальными переменными, для работы с ними желательно выработать
стратегию их использования в приложении.

Более подробно работа с состояниями отображения и
переменными состояния будет рассмотрена в разделе "Класс Page" лекции
2.

Краткие итоги

Web-приложения представляют собой особый тип программ,
основанных на архитектуре "клиент-сервер". Web-приложение
располагается и исполняется на сервере, получая от клиента исходные
данные для работы, а также передавая ему результаты работы в виде
HTML-кода, отображаемого в браузере.

Существует несколько технологий разработки
информационных систем, ориентированных на Интернет. Одной из
наиболее мощных технологий является ASP.NET. Web-приложения,
разработанные на основе ASP.NET работают исключительно в среде IIS
платформы Windows. ASP.NET является частью инфраструктуры .NET
Framework. Данная архитектура является основой для построения
современных приложений, ориентированных на работу в среде Windows, и
может использовать любой из совместимых языков программирования для
написания программного кода. Особенностью .NET Framework является
то, что различные модули одной и той же программной системы могут
быть написаны на различных языках программирования. Одним из
важнейших элементов данной архитектуры является наличие сборщика
мусора, осуществляющего очистку неиспользуемых областей памяти и
избавляющего программиста от проблемы "утечки памяти".

Каждое Web-приложение ASP.NET состоит из 3 частей:
информационной, программного кода и сведений о конфигурации.
Информационная часть включает в себя описание страницы в формате
HTML и содержит как элементы языка гипертекстовой разметки
документа, так и элементы ASP.NET. Программный код реализует
бизнес-логику, оформленную в виде процедур обработки данных. Этот
код исполняется сервером и взаимодействует с динамическими
элементами информационной части, позволяя динамически формировать
содержимое страницы, передаваемой клиенту. Сведения о конфигурации
содержат параметры, определяющие способ исполнения приложения на
сервере, параметры безопасности, реакцию на возникающие ошибки и
др.

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

1)
Благодаря архитектуре среды CLR в качестве операционной
системы может выступать любая версия Unix и вообще любая
ОС.
2)   Сборка (assembly) – это
коллекция файлов, которая предстает перед программистом в виде
единой библиотеки динамической компоновки (DLL) или исполняемого
файла (EXE). В технологии .NET сборка является базовой единицей для
повторного использования, контроля версий, защиты и развертывания.
Среда CLR представляет программисту ряд классов, позволяющих
манипулировать сборками.
3)   Библиотека классов .NET
открывает доступ ко всем возможностям CLR. Классы, составляющие эту
библиотеку, организованы при помощи пространств имен. Каждое
пространство имен заключает в себе классы, выполняющие близкие
функции.
4)   Альтернативой
управляемому коду является неуправляемый код, который не выполняется
CLR. Однако до появления .NET Framework все Windows-программы
использовали именно неуправляемый код.

© gsu.by