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

14.1.4.1. Директива обработки WebService

В начале ASMX-страницы находится директива обработки WebService, атрибуты которой содержат сведения о реализации Веб-сервиса. Эта директива предоставляет среде ASP.NET необходимые сведения, например, о том, какой класс реализует функциональность. Ниже приведен пример директивы обработки WebService:

<%@ WebService Language="c#" Codebehind="Service1.asmx.cs"

Class="WebService1.Service1" %>

Атрибут Language указывает, какой язык программирования использовался для разработки сервиса. Веб-сервис можно разрабатывать на любом языке, совместимом с .NET – например, на Visual Basic .NET или на Visual C#.

При создании сервиса в управляемом коде с использованием Visual Studio .NET ее реализация находится в файле с выделенным кодом. Файл с выделенным кодом связывается с ASMX-страницей посредством атрибута Codebehind.

При использовании шаблона сервиса ASP.NET атрибут Class указывает, какой класс в файле с выделенным кодом реализует функциональные возможности сервиса.

Клиенты Веб-сервиса – это компоненты, службы и приложения, ссылающиеся на сервис и использующие его. Стоит отметить, что это не обязательно клиентские приложения – во многих случаях клиентами служб могут быть другие Веб-приложения или даже другие службы.

14.1.5. Выполнение http-запросов из клиентского сценария ajax

Прежде чем обсуждать, каким образом можно использовать прокси-классы для вызова Веб-методов, рассмотрим, как можно решить ту же задачу при помощи класса WebRequest. Этим может потребоваться, если необходимо управлять уровнем связи или выполнять проверку данных, отправляемых на или с сервера, или если заранее не известны параметры самого сервиса.

В следующем примере показаны способы использования объекта WebRequest для реализации Веб-запросов GET и POST при подключении к указанным URL-адресам (конечные точки HTTP):

var resultElement;

function pageLoad()

{

resultElement = $get("ResultId");

}

// Эта функция вызывает GET запрос.

function GetWebRequest()

{

// Создаем объект WebRequest.

var wRequest = new Sys.Net.WebRequest();

// Указываем адрес.

wRequest.set_url("getTarget.htm");

alert("Target Url: getTarget.htm");

// Указываем команду.

wRequest.set_httpVerb("GET");

// Указываем-callback функцию.

wRequest.add_completed(OnWebRequestCompleted);

// Очищаем содержимое элемента, который будет использоваться для вывода результата.

resultElement.innerHTML = "";

// Вызываем запрос.

wRequest.invoke();

}

// Эта функция вызывает POST запрос.

function PostWebRequest()

{

// Создаем объект WebRequest.

var wRequest = new Sys.Net.WebRequest();

// Указываем адрес.

wRequest.set_url("postTarget.aspx");

alert("Target Url: postTarget.aspx");

// Указываем команду.

wRequest.set_httpVerb("POST");

// Указываем обработчик запроса.

wRequest.add_completed(OnWebRequestCompleted);

// Указываем тело POST.

var requestBody = "Message=Привет, Мир!";

wRequest.set_body(requestBody);

wRequest.get_headers()["Content-Length"] = requestBody.length;

// Очищаем содержимое элемента, который будет использоваться для вывода результата.

resultElement.innerHTML = "";

// Вызываем запрос.

wRequest.invoke();

}

// Эта функция вызывается асинхронно, когда завершится запрос.

function OnWebRequestCompleted(executor, eventArgs)

{

if(executor.get_responseAvailable())

{

// Отобразим статус запроса.

resultElement.innerHTML +=

"Status: [" + executor.get_statusCode() + " " +

executor.get_statusText() + "]" + "<br/>";

// Отобразим заголовки запроса.

resultElement.innerHTML += "Headers: ";

resultElement.innerHTML += executor.getAllResponseHeaders() + "<br/>";

// Отобразим тело запроса.

resultElement.innerHTML += "Body:";

if(document.all)

resultElement.innerText += executor.get_responseData();

else

resultElement.textContent += executor.get_responseData();

}

}

if (typeof(Sys) !== "undefined") Sys.Application.notifyScriptLoaded();

В табл. 11.1 перечислены основные классы, связанные с Веб-сервисами, которые можно вызвать из клиентского сценария.

Таблица 14.1. Пространства имен для клиента

Имя

Описание

Пространство имен Sys.Net

Содержит классы, управляющие взаимодействием между клиентскими приложениями AJAX в ASP.NET и Веб-службами на сервере. Пространство имен Sys.Net является частью Microsoft AJAX (библиотека).

Пространство имен Sys.Serialization

Содержит классы, связанные с сериализацией данных для клиентских приложений AJAX в ASP.NET.

Пространство имен Sys.Services

Содержит типы, которые обеспечивают доступ сценариев клиентских приложений AJAX в ASP.NET к службе проверки подлинности, службе профилей и другим службам приложения ASP.NET. Пространство имен Sys.Services является частью Microsoft AJAX (библиотека).

В табл. 11.2 перечислены основные классы, связанные с Веб-сервисами, которые можно вызвать на сервере.

Таблица 14.2. Пространства имен для сервера

Имя

Описание

System.Web.Script.Serialization

Содержит классы, обеспечивающие сериализацию в формат JSON и десериализацию из этого формата для управляемых типов. Также обеспечивает расширенные возможности для настройки сериализации.