
- •14. Применение Веб-методов. Технология Jasp
- •14.1. Веб-сервисы
- •14.1.1. Введение
- •14.1.2. Веб-службы в asp.Net
- •14.1.3. Доступ к Веб-сервисам в управляемом коде
- •14.1.3.1. Взаимодействие клиент-сервер для клиентов ajax
- •14.1.3.2. Клиентская архитектура технологии ajax
- •14.1.3.3. Серверная архитектура ajax
- •Xml-сериализация. Уровень связи Веб-служб поддерживает xml-сериализацию для soap-запросов к Веб-службам и возвращения типов xml по json-запросам к Веб-службам.
- •14.1.4. Создание Веб-сервиса
- •14.1.4.1. Директива обработки WebService
- •14.1.5. Выполнение http-запросов из клиентского сценария ajax
- •14.1.6. Предоставление доступа к Веб-службам в клиентском сценарии
- •14.1.6.1. Предоставление доступа к сервисам из клиентского сценария на Веб-странице asp.Net
- •14.1.6.2. Примеры
- •14.1.7. Ключевые термины
- •14.2. Технология Jasp
- •14.2.1. Введение
- •14.2.2. "Hello World" на Jasp
- •14.2.3. Создание страницы с разметкой, скриптом и стилями
- •14.2.4. Ресурсы в Jasp
- •14.2.4.1. Css ресурсы
- •14.2.4.2. JavaScript ресурсы
- •14.2.4.3. Html ресурсы
- •14.2.4.4. Бинарные ресурсы
- •14.2.5. Страницы и компоненты
- •14.2.5.1. Создание страниц
- •14.2.5.2. Создание компонент
- •14.2.5.2.1. Создание экземпляров компонент программно
- •14.2.5.2.2. Создание экземпляров компонент через разметку
- •14.2.5.2.3. Создание экземпляров компонент на JavaScript
- •14.2.6. Передача данных на клиентскую сторону
- •14.2.7. Наследование компонент и страниц
- •14.2.7.1. Наследование разметки
- •14.2.7.2. Наследование стилей
- •14.2.7.3. Наследование JavaScript
- •14.2.8. Конфигурирование Jasp
- •14.2.9. Ключевые термины
- •14.3. Краткие итоги
14.1.6. Предоставление доступа к Веб-службам в клиентском сценарии
Более удобный способ вызова Веб-сервисов заключается в использовании прокси-классов [8]. Как уже отмечалось, ASP.NET автоматически создаются прокси-классы JavaScript для Веб-служб. Эти прокси-классы являются производными от класса Sys.Net.WebServiceProxy. Чтобы вызвать метод Веб-сервиса, следует вызвать соответствующий метод прокси-класса JavaScript.
Из сценария можно предоставить доступ к Веб-службе, которая представлена файлом с расширением ASMX и класс которой определен с использованием атрибута ScriptServiceAttribute. Отдельные методы, вызываемые из сценария, должны быть дополнены атрибутом WebMethodAttribute.
В следующем примере показан порядок использования этих атрибутов в коде Веб-службы:
[ScriptService]
public class SimpleWebService : System.Web.Services.WebService
{
[WebMethod]
public string EchoInput(String input)
{
// Здесь расположен код метода.
}
}
Чтобы разрешить вызов Веб-служб из сценария, следует зарегистрировать обработчик HTTP ScriptHandlerFactory в файле Web.config приложения. Этот обработчик используется для обработки вызовов Веб-служб из сценария. В следующем примере показан элемент файла Web.config, определяющий добавление обработчика:
<system.web>
<httpHandlers>
<remove verb="*" path="*.asmx"/>
<add verb="*" path="*.asmx"
type="System.Web.Script.Services.ScriptHandlerFactory"
validate="false"/>
</httpHandlers>
<system.web>
Вызовы Веб-служб, выполненные не из сценария ASP.NET AJAX, обработчик ScriptHandlerFactory делегирует используемому по умолчанию обработчику, в котором вместо формата JSON используется SOAP. Делегирование выполняется автоматически. Какие-либо дополнительные действия следует выполнять только в том случае, если требуется запретить использование протокола SOAP в Веб-службах. В этом случае в файле Web.config необходимо определить следующие параметры конфигурации:
<system.web>
<webServices>
<protocols>
<clear/>
</protocols>
</webServices>
</system.web>
14.1.6.1. Предоставление доступа к сервисам из клиентского сценария на Веб-странице asp.Net
Чтобы разрешить вызов Веб-служб (ASMX) из клиентского сценария на Веб-странице ASP.NET, необходимо добавить на страницу элемент управления ScriptManager. Чтобы определить ссылку на Веб-службу, необходимо добавить дочерний элемент asp:ServiceReference к элементу управления ScriptManager. После этого необходимо установить URL-адрес Веб-службы в качестве значения атрибута ссылки на сервер path. Объект ServiceReference определяет необходимость создания прокси-класса JavaScript для вызова указанной Веб-службы в ASP.NET.
Добавим в начало страницы первым элементом формы объект ScriptManager:
<asp:ScriptManager ID="Scriptmanager1" runat="server">
<Services>
<asp:ServiceReference Path="~/SimpleWebService.asmx" />
</Services>
</asp:ScriptManager>
Объект ServiceReference может ссылаться на Веб-службу только в том же домене, в котором находится страница. Путь Веб-службы может быть относительным, относительным к приложению, относительным к домену или абсолютным. При использовании абсолютного пути следует убедиться, что он указан в том же домене.
При отображении страницы, содержащей этот элемент управления ScriptManager, для Веб-службы SimpleWebService.asmx создается прокси-класс JavaScript. В прокси-классе реализуются методы, соответствующие методам Веб-службы SimpleWebService.asmx. Страница также содержит прокси-классы JavaScript, соответствующие типам данных сервера, которые используются в качестве входных параметров или возвращаемых значений методов Веб-служб. Это позволяет написать клиентский сценарий, инициализирующий эти параметры, и передать их вызову метода.
Свойство InlineScript объекта ServiceReference определяет порядок включения прокси-класса JavaScript на странице. Если для свойства InlineScript установлено значение false (используется по умолчанию), получение сценария прокси-класса выполняется с помощью отдельного запроса. Этот параметр рекомендуется использовать в том случае, если несколько страниц ссылаются на одну службу и включено кэширование.
Если для свойства InlineScript установлено значение true, сценарий прокси-класса включается на страницу в качестве встроенного блока сценария. Это позволяет повысить производительность за счет сокращения числа сетевых запросов. Это особенно актуально при наличии на странице большого числа ссылок на службы и отсутствии ссылок на эту службу на других страницах. Если для свойства InlineScript установлено значение true, необходимо использовать относительный путь. Путь, задаваемый относительно домена, должен содержать ссылку на то же Веб-приложение.
Вызов метода Веб-сервисы из сценария осуществляется асинхронным способом. Чтобы получить возвращаемое значение или определить факт возврата запроса, следует определить функцию обратного вызова при успешном выполнении запроса. Функция обратного вызова вызывается при успешном выполнении запроса и содержит значение (если есть), возвращаемое в результате вызова метода Веб-сервиса. Также можно определить функцию обратного вызова при неудачном завершении запроса, используемую для обработки ошибок. Кроме того, можно передать в функции обратного вызова сведения о контексте пользователя. Если метод Веб-сервиса возвращает сложный тип, функция обратного вызова при успешном выполнении запроса принимает возвращаемое значение в форме объекта JavaScript, соответствующего типу сервера.