Про компанію Послуги Портфоліо Підтримка Відгуки клієнтів Контакнта інформація ТОВ Брутка: розробка програмного забеспечення та створення сайтів

Архів новин


Cutting Edge: Perspectives on ASP.NET AJAX

Е
сли в течение последних 12 месяцев вы не были отключены от сети, например, по причине путешествия на удаленный тропический остров или из-за участия в игровом реэлити-шоу, вы должны кое-что знать об AJAX. Но на всякий случай я все-таки вкратце напомню.
AJAX – это акроним, который сформирован из словосочетания Asynchronous JavaScript and XML. Цель AJAX: произвести реальный прорыв, позволяющий осуществить те решения, которые ранее были невозможны и неосуществимы. Наконец, следует понимать, из чего состоит AJAX. По существу это не технология. Это общий термин, обозначающий приложения для обозревателя с широкими возможностями, разработанные с помощью мощных новейших комбинаций клиентских веб-технологий, таких как JavaScript, каскадные таблицы стилей (CSS), DHTML и XMLHttpRequest.
Львиная доля существующих в настоящее время обозревателей поддерживает стандартный набор функций – и эти функции позволяют веб-разработчикам строить высоко интерактивные, быстро обновляющиеся приложения, способные выполнять для клиента большую работу. Благодаря этим возможностям приложения AJAX обеспечивают широкое взаимодействие с пользователем, напоминающее работу приложений настольной компьютерной системы. Более того, AJAX делает более легким, чем когда-либо, создание "mash-up" приложений. "Mash-up" – это веб-приложение, которое комбинирует информацию, извлеченную из нескольких источников (пример, совмещение Microsoft® Virtual Earth™ с информацией о продаже собственности с целью создания удобного инструмента для анализа операций с недвижимостью).
Как это ни странно звучит, я думаю, что AJAX настолько значителен и важен, что он будет забыт в уже следующем году или около того. Да-да, не удивляйтесь. По моему мнению, AJAX станет такой стандартной частью повседневной жизни, что мы даже не будем задумываться над этим, так же, как сегодня не считаем необходимым упоминать об использовании XML или HTTP.
Анонсированный на конференции профессиональных разработчиков Майкрософт в сентябре 2005 г., Microsoft ASP.NET AJAX (ранее известный как "Atlas") привносит множество новых возможностей в ASP.NET 2.0 (см. ajax.asp.net), позволяющих благодаря использованию AJAX повышать функциональность веб-узлов. В колонке за текущий месяц я изучаю ASP.NET AJAX, особенно пристально приглядываясь к некоторым его ключевым функциям. Эта колонка предполагает наличие у читателя хотя бы минимальную степень осведомленности об основных понятиях и инструментах. В качестве введения см. статью "Atlas at Last: ASP.NET Atlas Powers the AJAX-Style Sites You've Been Waiting For(Долгожданный Atlas: наконец-то ASP.NET Atlas поддерживает веб-узлы со стилями AJAX)". Мэтт Гиббс (Matt Gibbs) MSDN®Magazine, июль 2006 г. См. также дополнительную информацию в боковом поле "Still Synchronous for Now" (Пока еще синхронность).
Пути к AJAX в ASP.NET
Какие новые функции приложения можно построить с помощью AJAX? Или, более конкретно, какие функции можно построить, используя асинхронные вызовы JavaScript и объектную модель обозревателя? Существуют три основных технологии, запускающих функциональные возможности AJAX: вызовы удаленных методов, привязка данных клиента и визуальные эффекты. Поскольку понятие "вызовы удаленных методов" звучит несколько неопределенно, я ограничу его частичной обратной передачей страниц и внешними запросами.
Как преобразовать новые или имеющиеся приложения ASP.NET в приложения AJAX? Имеются опубликованные данные о том, что на сегодняшний день существует более 100 оболочек, поддерживающих большое разнообразие платформ и использующих ряд технологий программирования. Обобщая, я бы разбил оболочки AJAX на три основных категории, исходя из их возможностей: оболочки обратного вызова (callback frameworks), оболочки пользовательского интерфейса (UI frameworks) и полные оболочки (full frameworks).
Оболочка обратного вызова состоит из простого набора клиентских и серверных библиотек. Она не позволяет делать практически ничего, кроме активизации части серверного кода со стороны клиента с переводом параметров входа и выхода в сериализованный формат. Типичная оболочка пользовательского интерфейса представляет собой развитие существующей библиотеки профессионального управления, которая обеспечивает усовершенствованные сетку, диаграмму и элементы управления деревом каталогов. Это поддерживает асинхронную обратную передачу и встраивание кода JavaScript на стороне клиента, обеспечивающих автоматическое обновление страниц. Наконец, полная оболочка обеспечивает богатую модель программирования, охватывающую элементы управления и сервисы сервера приложений, желательно, как на стороне клиента, так и на стороне сервера. Microsoft ASP.NET AJAX попадает в третью категорию.
Если коммерческий набор элементов управления уже используется, переход на новую версию, поддерживаемую техникой AJAX, окажется, скорее всего, безболезненной процедурой. Если приложение полностью разрабатывается специалистами компании и при этом уделяется внимание как уровню представления, так и уровню внутреннего интерфейса, наиболее реализуемым техническим решением здесь является полная оболочка. В конечном счете простая оболочка полезна только добавлением к существующим приложениям ASP.NET функций быстрого обратного вызова, как для версии 1.1, так и для версии 2.0.
ASP.NET 2.0 уже предоставляет возможность встроенного сценария для функций прикладного интерфейса, требующих обратного вызова, которую я уже несколько раз описывал в настоящей рубрике, см., например, "Cutting Edge: Script Callbacks in ASP.NET (Новейшие технологии: обратные вызовы сценариев в ASP.NET)" и "Cutting Edge: Custom Script Callbacks in ASP.NETСпециальные обратные вызовы сценариев в ASP.NET (Новейшие технологии: пользовательские обратные вызовы сценариев в ASP.NET)". И в качестве программы, сопровождающей данную рубрику, я включил демонстрационную версию чрезвычайно простой оболочки AJAX для вызовов удаленного метода. Она состоит всего из 50 строк кода, частично наим JavaScript, а частично – в управляемом коде. Очевидно, что она не может оказать конкуренцию ASP.NET AJAX, но она может использоваться в качестве центрального кода для подключения основных возможностей AJAX к приложениям ASP.NET 1.1.

Прямой путь к ASP.NET AJAX
ASP.NET AJAX состоит из двух разных, но не исключающих друг друга интерфейсов прикладного программирования (API): клиента и сервера. Функциональные возможности AJAX можно строить с помощью прямого программирования на стороне клиента, традиционного программирования на стороне сервера или любой их комбинации. Любая, базирующаяся на технологии AJAX страница, требует наличия на стороне клиента кода JavaScript, необходимого для обращения к объектной модели документа (DOM, document object model) обозревателя и к любому отражающему специфику конкретного приложения расширению. Однако, совершенно не обязательно поручать написание такого кода сценария программисту ASP.NET. Фактически оболочка может генерировать код сценария по индивидуальному заказу в качестве выходного продукта элемента управления сервера. Эта форма косвенного обновления страницы представляет собой простейший способ подключения возможностей AJAX к новым и существующим страницам ASP.NET 2.0. В ASP.NET AJAX обновление страницы может управляться частью клиентского кода, автоматически внедряемого элементом управления UpdatePanel сервера.
Элемент управления UpdatePanel представляет собой мозговой центр серверной модели программирования ASP.NET AJAX. Он позволяет запускать серверную программу и возвращать обозревателю клиента обновленную разметку. Может показаться удивительным, насколько это отличается от классических обратных передач. Разница здесь состоит в том, как выполняется обратная передача – вместо полного обновления страницы элемент управления UpdatePanel обходится отправкой внешнего запроса новой разметки и, когда приходит ответ, выполняет обновление дерева DOM.
Клиентская модель программирования ASP.NET концентрируется вокруг возможности помещения вызовов в удаленные конечные точки (главным образом, но не исключительно веб-службы ASP.NET и службы Windows® Communication Foundation). Инициированный непосредственно обозревателем клиента, вызов к удаленной конечной точке требует наличия прокси-сервера с поддержкой JavaScript и кода JavaScript. Наконец, привязка данных клиента может расцениваться как расширение рабочей среды JavaScript и DOM. Используя чисто клиентский стиль программирования, можно подсоединиться к удаленной конечной точке, загрузить данные и привязать их к поддереву DOM. Структура шаблона наряду с некоторой информацией о состоянии остается у клиента, и только необработанные данные передаются клиенту от сервера.
К программированию в среде ASP.NET AJAX существует три основных подхода.
Элемент управления UpdatePanel и перехватывающий шаблон
Элемент управления UpdatePanel объявляет стиль программирования, при котором содержимое страницы обновляется без обновления всей страницы и без необходимости программирования на стороне клиента. На языке ASP.NET AJAX это называется частичной визуализацией. Элемент управления UpdatePanel является наиболее очевидным компонентом, задействованным в разблокировании этой возможности. Однако истинным средством управления, стоящим за внутренней реализацией частичной визуализации, является элемент управления ScriptManager. Тем не менее, элемент управления UpdatePanel остается основным инструментом, используемым разработчиками при написании частично обновляемых страниц.
Обновление веб-страницы может осуществляться либо двойным нажатием кнопки "Отправить", либо программной реализацией метода отправки объекта формы DOM. В обоих случаях обозреватель фиксирует текущую страницу и посылает новый запрос внутреннему веб-серверу. Приходящий ответ замещает существующее содержимое.
Цель элемента управления UpdatePanel состоит всего лишь в том, чтобы подключить этот процесс. Он перехватывает передаваемые формы, захватывает любую пересылаемую информацию и посылает ту же самую информацию через внешний вызов на базе объекта XMLHttpRequest. Кроме того, UpdatePanel добавляет некоторую дополнительную информацию, указывающую, какой набор элементов управления должен обрабатываться и отображаться при частичной визуализации страницы на сервере.
Характер изменений, возникающих в результате действия элемента управления UpdatePanel, полностью описывается перехватывающим шаблоном. Шаблон отсылается любому внешнему компоненту, замечающему вызов объекта и встраивающему свой собственный код между вызывающей и принимающей сторонами. Так внешний компонент получает полное управление операцией, контролирует ход выполнения задачи и возвращает вызывающей стороне адекватный ответ. Рис. 2 иллюстрирует исполнение этого шаблона в ASP.NET AJAX.
Рис. 2. Элемент управления UpdatePanel и перехватывающий шаблон (Щелкните изображение, чтобы увеличить его)
Код сценария, который встраивается в страницу клиента, регистрирует обработчика события DOM, связанного с отправкой формы. Этот новый обработчик просто заменяет классический запрос на запрос, обрабатываемый объектом XMLHttpRequest, и передает дополнительную информацию. В частности, он добавляет имя элемента управления UpdatePanel, ответственного за обратную передачу в существующий список входных полей. Модифицированное содержание страницы с листаемой сеткой выглядит следующим образом:
ScriptManager1=UpdatePanel1|GridView1&
__EVENTTARGET=GridView1&
__EVENTARGUMENT=Page%241&
__VIEWSTATE=...&
__VIEWSTATEENCRYPTED=&
__EVENTVALIDATION=...
Псевдопараметр элемента управления ScriptManager ссылается на идентификационный номер элемента управления UpdatePanel, отвечающего за обратную передачу. Только элементы управления, связанные с указанным элементом управления UpdatePanel, будут обновлены, а их модифицированная разметка послана обратно обозревателю наряду с обновленной информацией о состоянии просмотра.
Частичная визуализация является общей особенностью различных оболочек AJAX, хотя ее внутренняя реализация в них различается. Основные различия связаны с подходом, используемым для связи обновляемых элементов управления с запросом. В ASP.NET AJAX обновляемые элементы управления группируются в наиболее удаленном элементе управления контейнера (UpdatePanel). Все, что находится внутри контейнера, передается разметке – таким образом показываются изменения, внесенные в отображаемую страницу. Одним из альтернативных подходов является подход, требующий программной регистрации в оболочке отдельных элементов управления с целью реализации обратных передач в стиле AJAX. Это то, что в большей или меньшей степени реализуется в ASP.NET 2.0 для элементов управления, поддерживающих состояние элемента управления.
Более гибким подходом по сравнению с группировкой элементов управления в контейнере, является подход, состоящий в том, чтобы каждый отдельный элемент управления определял сам, как он будет реализовывать обратные передачи в стиле AJAX. Однако при этом потребуются дополнительные инструкции отделенного кода или должны использоваться специальные элементы управления. Будучи подходящим для библиотек элементов управления и других подобных продуктов, этот подход значительно более интрузивен для такой веб-оболочки, как ASP.NET.
Элемент управления UpdatePanel представляет собой класс, который заимствуется в System.Web.UI.Panel. Будучи контейнером дочерних элементов управления ASP.NET без пользовательского интерфейса, UpdatePanel может содержать любые элементы управления сервера ASP.NET и не требует использования каких-либо специальных включаемых с помощью технологии AJAX элементов управления. С использованием элемента управления UpdatePanel программирование в среде AJAX полностью осуществляется на сервере на основе тех же модели приложения и стиля программирования, что и в классической технологии ASP.NET. Разработчикам не нужно изучать язык JavaScript или клиентскую библиотеку Microsoft AJAX Library. Более того, им не придется иметь дела с XML Script или DOM обозревателя.
Преобразование традиционной страницы ASP.NET в страницу AJAX представляет собой двухступенчатую операцию. Сначала на страницу необходимо добавить элемент управления ScriptManager. Затем создается группа элементов управления, которые должны частично и асинхронно обновляться с помощью элемента управления UpdatePanel. Элемент управления UpdatePanel поддерживает вложенные сценарии и может создаваться динамически, причем страница ASP.NET может содержать столько элементов UpdatePanel, сколько необходимо.
Фактическое обновление включается двумя возможными способами: когда дочерние элементы управления осуществляют обратную передачу и когда происходят особые внешние события. Используя триггеры и другие свойства, можно в зависимости от различных условий обновлять содержимое элемента управления UpdatePanel.
Благодаря элементу управления UpdatePanel можно поштучно переносить страницы ASP.NET в AJAX и делать это достаточно быстро. Одна и та же страница ASP.NET фактически может активизировать операции обратной передачи как в стиле AJAX, так и классические. По этой причине элемент управления UpdatePanel должен пересылать состояние просмотра страницы с каждым запросом. В частности, состояние просмотра посылается на сервер, обновляется с целью отображения произошедших на определенных элементах управления изменений, после чего загружается клиентом. То же самое происходит с контрольными данными событий. Состояние просмотра и контрольные данные событий не могут обновляться на стороне клиента и по этой причине должны отсылаться назад к серверу, проверяться на взлом и соответствующим образом обновляться. Наличие новейших копий состояния просмотра и контрольных данных событий на стороне клиента является ключом к поддержанию страницы в согласованном состоянии, допускающем успешные операции обратной передачи как в стиле AJAX, так и в классическом стиле.
В конце концов, UpdatePanel представляет собой наиболее удобный подход к сбору информации для ASP.NET AJAX, включающий в себя минимально возможную работу по обновлению и перемещению, и полностью обеспечивающий возможность взаимодействия между классическими страницами и страницами в стиле AJAX. При использовании обновляемых панелей страницы обновляются более быстро. Фактически, эти обновления иногда бывают даже слишком быстры для пользователей, чтобы пользователи могли их заметить. По этой причине активной панели, отражающей происходящие процессы, может оказаться недостаточно. Такая активная панель, как элемент управления UpdateProgress, предназначена для продолжительных задач, а не для того, чтобы обеспечивать пользователям обратную связь с отображаемыми изменениями. Наилучшим средством обеспечения обратной связи с такими изменениями является средство расширения UpdatePanelAnimation, которое определяется в последней предварительной версии (Community Technology Preview, CTP) набора инструментов управления AJAX Control Toolkit. Можно увидеть пример этого в действии. Средство расширения анимирует область, охватываемую элементом управления UpdatePanel во время операции обратной передачи. В частности, с помощью средства расширения можно установить анимации для обновления и обновленные события. Однако не забудьте, что AJAX Control Toolkit следует устанавливать отдельно, поскольку он не включен в расширения ASP.NET AJAX.

Управление внешними вызовами
При наличии у пользователя достаточных знаний языка JavaScript и желания попытаться делать прямые вызовы от клиента к серверу возможно альтернативное решение: использование веб-служб и вызов методов статических страниц.
Путем регистрации веб-службы ASMX с помощью менеджера сценариев осуществляется инструктаж инфраструктуры ASP.NET AJAX по генерированию proxy-класса JavaScript и его встраиванию в страницу клиента. Proxy-класс можно просмотреть, набрав в адресной строке локального компьютера URL-адрес веб-службы и комбинацию /js suffix. Ниже приводится пример proxy-класса JavaScript для веб-службы с двумя общими методами. Код упрощен для лучшей читаемости:
Type.registerNamespace('Samples.MyWebService');
Samples.MyWebService = new function()
{
this.appPath = "http://YourServer/AjaxDemo/";
var cm = Sys.Net.ServiceMethod.createProxyMethod;
cm(this, "LookupCustomer", "id");
cm(this, "LookupAllCustomers");
}
Этот код делает возможным вызов веб-службы из тега сценария. Он использует классический шаблон Proxy, и весь механизм абсолютно такой же, что и при использовании веб-служб на сервере в классической технологии ASP.NET или в приложениях Windows.
Однако необходимы некоторые предостережения. Какой тип серверного кода вызывается клиентом? Или, выражаясь другими словами, какого типа операции активизируются клиентом на веб-службах? Веб-службы, вызываемые со страниц AJAX, подвергают воздействию определенного рода бизнес-логики на клиентские страницы. Являясь конечной точкой общего назначения, веб-служба может быть вызвана из Интернета, и не существует встроенного уровня безопасности для защиты логики приложения пользователя. Правда, в этой уязвимости нет ничего нового.
Технология ASP.NET AJAX дает разработчикам возможность выставлять логику приложения с помощью веб-служб. Однажды опубликованная в Интернете, эта логика (если она не защищена каким-либо уровнем безопасности) становится доступной всем, кто ее вызы

2007-03-26

 

Архів новин: новини IT, опис технологій, ціни