Описание архитектуры ASP.NET
11.3.1 ASP.NET — это платформа для создания Web-приложений и Web-сервисов, работающих под управлением IIS. Сегодня существуют другие технологии, позволяющие создавать Web-приложения. К ним относятся прежде всего, очень популярные сегодня языки PHP и PERL и т. д. Архитектуры ASP.NET является частью инфраструктуры .NET Framework.
Заметим лишь, что ASP.NET функционирует исключительно на серверах Windows, так как требует наличия IIS.
Для создания Web-приложений, не требующих IIS, а использующих, например, Web-сервер Apache и работающих на серверах под управлением операционных систем, отличных от Windows, применяются другие технологии.
Базовые языки программирования, с помощью которых сегодня возможна разработка Web-приложений, являются полностью объектно-ориентированными, что делает разработку исполнимой части, а также ее модификацию, обслуживание, отладку и повторное использование гораздо более простым занятием, чем в других технологиях.
11.3.2 Каждое Web-приложение, разрабатываемое на основе ASP.NET состоит из информационной части, программного кода и сведений о конфигурации.
Информационная часть содержит статические и динамические элементы страницы и реализуется в виде Web-форм. Статические элементы представляют собой типичные элементы языка HTML, динамические же компонуются программным кодом приложения во время его выполнения (например, запросы к базе данных).
Программный код реализует логику, определенную в процедурах обработки данных, которые определяют реакцию приложения на запросы пользователя. Программный код исполняется сервером и взаимодействует с динамическими элементами информационной части для формирования отклика приложения.
Сведения о конфигурации представляют собой файлы, содержащие параметры, определяющие способ исполнения приложения на сервере, параметры безопасности, реакцию приложения на возникающие ошибки и т. д.
Основным элементом Web-приложения является Web-форма (или Web-страница), которая, с одной стороны, похожа на Windows-форму, т. к. позволяет размещать внутри себя различные элементы управления, способные отображать данные и реагировать на действия пользователя, а с другой — представляет собой HTML-страницу, т. к. содержит все ее атрибуты.
При разработке Web-приложений на основе ASP.NET возможны два варианта организации Web-форм.
В первом случае весь код информационной части и программная часть хранятся в одном файле с расширением .aspx. Программный код при этом помещается в так называемые блоки сценариев. Эту модель целесообразно использовать при со- здании простых Web-приложений, поскольку в этом случае все хранится в одном пакете.
Во втором случае каждая Web-страница разделяется на две части: Web-форму и файл, содержащий программный код. При этом форма, как и в первом случае, сохраняется в файле с расширением .aspx, а программный код — в файле с расширением .cs. Такая модель обеспечивает лучшую организацию элементов Web-приложения за счет отделения пользовательского интерфейса от программной логики.
11.3.3 Опишем типовой сценарий взаимодействия элементов Web-приложения с клиентом, осуществляющим запрос формы этого приложения (рисунок 11.2).
Рисунок 11.2 - Сценарий взаимодействия элементов Web-приложения с клиентом
При обращении клиента на сервере IIS запускается Web-приложение. Запущенное приложение формирует отклик. Для этого на сервере создается экземпляр запрошенной Web-формы, она генерирует HTML-текст отклика, который и передается браузеру клиента. Сразу после этого экземпляр Web-формы уничтожается.
Пользователь, получив HTML-страницу, сгенерированную приложением, имеет возможность заполнять различные поля формы (тестовые поля, переключатели и т. п.). После заполнения всех необходимых полей формы пользователь инициирует отправку данных, введенных им в страницу, обратно на сервер.
Примечание. Это происходит за счет использования технологии обратной отсылки, которая вызывается при выполнении определенных действий (например, нажатия на кнопку).
Получив данные от пользователя, сервер создает новый экземпляр Web-формы, заполняет его полученными данными и обрабатывает все необходимые события. По окончании обработки сервер формирует HTML-код ответа и отправляет его клиенту, а затем уничтожает экземпляр Web-формы.
В момент окончания работы с Web-приложением пользователь либо закрывает браузер, либо переходит на другую интернет-страницу. В этот момент завершается сеанс работы пользователя с данным приложением, однако само приложение может быть завершено сервером не сразу после окончания последнего сеанса работы пользователя.
Это связано с управлением распределением памяти платформой .NET Framework, которая основана на периодической проверке ссылок объектов. Если в результате такой проверки обнаружится, что объект больше не используется, сервер уничтожает его, освобождая таким образом занимаемую им память. Поэтому нельзя точно сказать, когда именно наступит событие Application_End для данного Web-приложения.
11.3.4 Обработка кода .aspx подразделяется на несколько этапов (рисунок 13.3):
1. IIS определяет, что файл с расширением .aspx действительно должен обрабатываться программой ASP.NET .
2. Если страница была запрошена в этом приложении впервые, ASP.NET автоматически создает экземпляр класса приложения (экземпляр, полученный из класса .NET System.Web.Http-application). Приложение ASP.NET создается только один раз и совместно используется всеми клиентами. Запущенное приложение никогда не будет прекращено, если не завершить этот процесс вручную или не перезагрузить компьютер.
3. Если файл .aspx никогда не исполнялся ASP.NET компилирует и заносит в кэш его исполняемую версию. Если эта задача уже выполнена и после этого файл не подвергался изменениям, ASP.NET использует существующую откомпилированную версию.
4. Откомпилированный файл запускает и исполняет свой код. (Событие Page_Load)
5. По завершении исполнения кода ASP.NET инициализирует визуализацию каждого элемента веб-страницы. Создается экземпляр страницы.
6. Страница отсылается клиенту и выполнение приложения завершается.
Рисунок 11.3 - Подробный сценарий взаимодействия элементов
Web-приложения с клиентом при первом запросе
11.3.5 Рассмотрим последовательность событий, возникающую при обращении клиента к странице приложения:
1. При запросе страницы, прежде всего, инициируется событие Page_Init, которое производит начальную инициализацию страницы и ее объекта. Это событие нельзя использовать для инициализации элементов управления, размещенных на странице, так как они еще не созданы.
2. После этого инициируется событие Page_Load. Большинство Web-страниц используют это событие для выполнения инициализации, например, заполнения полей данными, установки начальных значений для элементов управления и т. д. Кроме того, в процедуре обработки данного события возможно определение того, была ли загружена страница впервые или обращение к ней осуществляется повторно.
Примечание. Для определения текущего состояния страницы необходимо проверить свойство Page.IsPostBack, которое будет иметь значение false при первом запуске страницы. Обратная отсылка данных на сервер называется postback (см, рисунок 13.5).
3. Событие Page.PreRender инициируется после того, как сервер обработал все события страницы, но генерация ее HTML-кода еще не произошла. Обычно это событие используется ASP.NET для привязки элементов управления к источникам данных непосредственно перед созданием HTML-кода.
4. В результате обработки всех инициированных событий генерируется HTML-код страницы, который и передается клиенту, после чего выполняется Очистка, в рамках которой инициируется событие Page_Unload. Оно предназначено для освобождения ресурсов, занятых данной страницей.
Описанная последовательность событий позволяет создать описание жизненного цикла Web-страницы, изображенного на рисунке 13.4.
Приведем пример. Пусть у нас существует страница с кнопкой (Button) "Отправить" и текстовым полем (TextBox) без автоматической обратной отсылки. При изменении текста в текстовом поле и щелчке на кнопке "Отправить" инициируется обратная отправка данных страницы на сервер (этого не произошло при изменении текста в текстовом поле, так как соответствующая опция этого элемента управления AutoPostBack установлена в false). В момент обратной отправки страницы на сервер ASP.NET запускает следующие события:
1. Page.Init
2. Page.Load
3. TextBox.TextChanged
4. Button.Click
5. Page.PreRender
6. Page.Unload
Рисунок 13.4 - Жизненный цикл страницы ASP.NET
11.2.6 Если мы захотим создать некую переменную, хранящую, например идентификатор заказа, с которым мы в данный момент работаем, сделать это будет невозможно, т. к. форма после отправки клиенту сразу же уничтожается. Чтобы обойти этот недостаток, ASP.NET использует специальный механизм для сохранения данных, введенных в элементы управления Web-формы. Согласно этому принципу, в рамках каждого запроса на сервер отправляются все данные, которые были введены в элементы управления. При этом, как уже упоминалось выше, на сервере возникает событие Page_Init, целью которого является создание Web-формы и ее инициализация. В процессе инициализации в элементы управления созданной формы записываются переданные от клиента данные. Теперь эти данные становятся доступны приложению посредством обработки события Page_Load, возникающего при каждом обращении к странице. Для реализации этого механизма в ASP.NET используются состояния отображения (view state). Состояние отображения Web-формы доступно только внутри этой Web-формы.
Рисунок 11.5 - Подробный сценарий взаимодействия элементов
Web-приложения с клиентом при запросе обратной отсылки
На рисунке 11.5 приведен подробный сценарий взаимодействия элементов Web-приложения с клиентом при запросе обратной отсылки.
Дата добавления: 2017-03-12; просмотров: 2378;