Украина |
Применение Веб-методов. Технология Jasp
Презентацию к данной лекции Вы можете скачать здесь.
14.1. Веб-сервисы
14.1.1. Введение
На предыдущих лекциях была рассмотрена технология ASP.NET AJAX, которая позволяла существенно улучшить производительность Веб-приложений и в то же время улучшала работу пользователя с сайтом:
- Сокращение времени работы серверного кода – использование UpdatePanel, за счет чего метод Page.Render отрисовывает не всю странице целиком, а только определенные части. Более того, при этом уменьшается и объем данных, передаваемый от сервера клиенту (опять же за счет того, что передается не вся страница ).
- Пользователь не наблюдает процесс перезагрузки всей страницы при каждой обратной передаче, что делает пользовательский интерфейс страницы более естественным.
Среди недостатков подхода ASP.NET AJAX стоит отметить тот факт, что каждое действие пользователя приводит к отправке на сервер и получение от него большого объема данных в виде ViewState. Если же отказаться от использования ViewState, то для восстановления страницы на сервере необходимо либо хранить все данные в сессии, либо каждый раз извлекать их из базы данных. Еще один недостаток заключается в том, что при использовании достаточно сложного интерфейса, насыщенного большим количеством сложных компонент, время их рендеринга на сервере сильно возрастает.
Один из подходов к решению этих проблем заключается в использовании Веб-сервисов, также известных, как Веб-службы.
Веб-сервисы XML – это единица программного кода, обслуживаемая Веб-сервером и доступная в рамках стандартных промышленных технологий, таких как HTTP и XML [1]. Веб-сервисы предлагают такой уровень совместимости и взаимодействия в отношении операционных систем, платформ и языков, который ранее был просто недоступен.
Веб-службы ASP.NET являются компонентами, методы которых можно вызывать с помощью запросов HTTP. Однако в отличие от традиционного Веб-приложения, Веб-сервисы XML можно использовать не только для того, чтобы возвращать браузеру HTML-код с целью визуализации. Скорее наоборот – Веб-сервисы XML чаще всего предоставляют функциональные возможности, аналогичные возможностям стандартной библиотеки программного кода .NET, такие как специальные вычисления, выборку данных из БД, чтение цен на акции и другие.
Веб-службы предоставляют возможность обмениваться сообщениями в свободно связанной среде, используя такие стандартные протоколы, как HTTP, XML, XSD SOAP и WSDL. Сообщения могут быть структурированы и типизированы или иметь свободный формат. Поскольку основой Веб-служб служат стандартные протоколы, их приложения могут обмениваться данными с самыми разными реализациями, платформами и устройствами [2].
Вместо того чтобы каждый раз ради отправки или получения данных посылать или получать всю страницу целиком, можно сделать так, чтобы клиентский код JavaScript обращался к Веб-службе, получал необходимые данные и сам же их отображал. Этот подход серьезно сокращает трафик между сервером и клиентом и снижает нагрузку на сервер, так как теперь его основными обязанностями является манипулирование данными.
При этом, однако, многократно возрастает нагрузка на клиент. Это может привести к тому, что данный подход станет неприменим в случаях, когда у клиентов слабые компьютеры или на них установлены старые браузеры, плохо поддерживающие JavaScript.
14.1.2. Веб-службы в ASP.NET
Веб-службы можно создавать, используя архитектуру ASP.NET, что позволяет им использовать разнообразную функциональность платформы .NET Framework: например, проверку подлинности, кэширование и управление состоянием [3]. Поскольку основой для Веб-сервисов в управляемом коде служат ASP.NET и платформа .NET Framework, разработчики могут сосредоточиться на создании Веб-служб или на их использовании, не тратя времени на разработку инфраструктуры.
При работе с Веб-сервисами существуют две фундаментальные роли:
- Создание Веб-сервиса – при создании XML Веб-службы создается приложение, которое предоставляет некую функциональность клиентам этой XML Веб-службы.
- Обращение к Веб-сервису – при обращении к Веб-сервису клиентское приложение находит Веб-службу, создает ссылку на нее и использует ее функциональные возможности. Обычно клиентом XML Веб-службы является приложение, способное отправлять, принимать и обрабатывать сообщения, отправляемые Веб-службе и получаемые от нее. Тем не менее, минимальное требование заключается в том, что клиент должен быть способен отправлять сообщения Веб-службам. Это требование относится ко всем приложениям, работающим под управлением платформы .NET Framework.
14.1.3. Доступ к Веб-сервисам в управляемом коде
ASP.NET позволяет создавать Веб-сервисы, к которым можно обращаться из клиентского сценария страниц. Страницы взаимодействуют с сервером посредством уровня связи, использующего технологию AJAX для вызова Веб-служб. Обмен данными между клиентом и сервером осуществляется асинхронно, как правило, в формате JSON.
14.1.3.1. Взаимодействие клиент-сервер для клиентов AJAX
На Веб- страницах с поддержкой технологии AJAX браузер отправляет первый запрос этой страницы на сервер, а затем выполняет последовательные асинхронные запросы данных к Веб-сервисам. Клиентские элементы взаимодействия представлены в форме загруженных с сервера прокси-классов и основной библиотеки клиентских сценариев. К серверным элементам взаимодействия относятся обработчики и пользовательские службы. На рис. 14.1 показаны элементы, которые участвуют во взаимодействии между клиентом и сервером.
14.1.3.2. Клиентская архитектура технологии AJAX
Браузер вызывают методы Веб-сервисов с помощью прокси-классов [4, 5]. Прокси-класс – это сценарий, который автоматически создается сервером и загружается в браузер во время загрузки страницы. Прокси-класс предоставляет клиентский объект, который позволяет вызвать реализованный в Веб-сервисе методы.
Чтобы вызвать метод Веб-сервиса, клиентский сценарий вызывает соответствующие методы прокси-класса. Эти вызовы выполняются асинхронно посредством объекта XMLHTTP.
Код в прокси-классах скрывает сложность XMLHTTP [6] и различия между браузерами. Он упрощает клиентский сценарий, необходимый для вызова Веб-сервиса.
Существует два подхода к вызовам методов Веб-сервиса.
- Вызов Веб-сервиса с помощью команды POST HTTP. POST -запрос состоит из основной части, содержащей данные, которые обозреватель отправляет на сервер. Этот запрос не имеет ограничений по размеру. Поэтому можно использовать POST -запрос, если размер данных превышает внутреннее ограничение по размеру для запроса GET. Клиент сериализует запрос в формат JSON и отправляет его на сервер в качестве данных POST. Сервер выполняет десериализацию данных из формата JSON в типы .NET Framework и выполняет фактический вызов службы. Во время ответа сервер сериализует возвращаемые значения и передает их обратно клиенту, который выполняет их десериализацию в объекты JavaScript для обработки.
- Вызов Веб-служб с помощью команды GET HTTP. Этот вызов аналогичен POST -запросу, однако существует несколько отличий:
На рис. 14.2 показана клиентская архитектура технологии AJAX в ASP.NET.
К элементам клиентской архитектуры относятся уровень взаимодействия Веб-сервиса и загруженные прокси-классы для используемых на странице служб. Этот уровень представляет собой библиотеку типов клиентского сценария, которые позволяют клиенту взаимодействовать со службами на сервере. Они также освобождают клиентские приложения от необходимости установки и поддержания асинхронной связи между клиентом и сервером. Они инкапсулируют объект XMLHTTP браузера, который предоставляет возможность асинхронного взаимодействия, и предоставляют клиентским приложениям независимость от браузера. Ниже приведены основные элементы уровня связи Веб-служб:
- WebRequest.Предоставляет функциональные возможности клиентского сценария для создания Веб-запроса.
- WebRequestManager. Управляет потоком Веб-запросов, направленных объектом Sys.Net.WebRequest соответствующему объекту-исполнителю.
- XmlHttpExecutor.Выполняет асинхронные сетевые запросы, используя поддержку XMLHTTP Веб-обозревателем.
- JSON - сериализация. Выполняет сериализацию объектов JavaScript в формат JSON. Десериализацию можно выполнить с помощью функции eval JavaScript.
По умолчанию сериализация выполняется в формат JSON, однако отдельные методы Веб-сервисов и Веб- страниц ASP.NET могут возвращать значения в других форматах, например XML. Формат сериализации, используемый методом, можно указать с помощью атрибутов. Например, для службы ASMX можно задать атрибут ScriptMethodAttribute, предписывающий методу Веб-сервиса возвращать данные в формате XML, как показано в следующем примере:
[ScriptMethod(ResponseFormat.Xml)]
14.1.3.3. Серверная архитектура AJAX
На рис. 14.3 показана серверная архитектура AJAX, включающая элементы, обеспечивающие взаимодействие с клиентскими приложениями.
Элементы серверной архитектуры включают уровень связи Веб-служб, обработчик HTTP-данных и классы сериализации, пользовательские службы, методы страниц и службы приложений. На рисунке показаны следующие отдельные элементы:
- Пользовательские Веб-службы. Предоставляют функциональную возможность службы, реализуемую пользователями, и возвращают соответствующий ответ клиентскому приложению. Пользовательскими Веб-службами могут быть службы ASP.NET или WCF. Уровень связи Веб-служб автоматически создает прокси-классы клиентского сценария, которые могут быть вызваны асинхронно из клиентского сценария.
- Методы страниц. Этот компонент позволяет вызывать метод страницы ASP.NET так, как если бы он был методом Веб-службы. Методы страниц должны быть определены на странице, с которой осуществляется вызов метода страницы.
- Служба проверки подлинности. Служба проверки подлинности создает прокси-класс проверки подлинности, который позволяет пользователю осуществлять вход и выход из системы с помощью клиентского сценария JavaScript.
- Служба ролей. Служба ролей создает прокси-класс ролей, который позволяет осуществлять доступ из клиентского сценария JavaScript к сведениям о ролях для текущего пользователя, прошедшего проверку подлинности.
- Служба профилей. Служба профилей создает прокси-класс профилей, который позволяет клиентскому сценарию JavaScript получать и задавать свойства для пользователя, связанного с текущим запросом.
- JSON - сериализация. Серверный компонент JSON - сериализации позволяет выполнять настраиваемую сериализацию и десериализацию общих типов .NET Framework в формат JSON и из него.
- XML- сериализация. Уровень связи Веб-служб поддерживает XML- сериализацию для SOAP-запросов к Веб-службам и возвращения типов XML по JSON -запросам к Веб-службам.