Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
206
Добавлен:
10.05.2015
Размер:
8.8 Mб
Скачать

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, соответствующего типу сервера.