Обмен данными со сложной структурой

До сих пор в обмене данными между клиентом и сервером участвовали только строки или данные элементарных типов (строки, логические значения, числа). Однако существует возможность организовать обмен данными, имеющими более сложную структуру. По разнообразию типов данных JavaScript не может конкурировать с .NET Framework, тем не менее формат JSON обеспечивает, хотя и рудиментарную, поддержку массивов и объектов.

Платформа ASP.NET AJAX поставляется с возможностью сериализации и десериализации данных, реализуемых в JSON. Попробуем добавить новую функциональную возможность к веб-службе деления двух чисел из примеров 5.1 и 5.2. Для этого мы создадим новый веб-метод, который будет возвращать сразу два значения – результат деления и текущее время на сервере. Для этого мы сначала создадим в файле MathService.asmx новый класс, на основе которого будет создаваться возвращаемый объект:

public class DivisionData
{
public float result;
public string calculationTime;
}

Затем добавим метод, что приводится ниже, который создает и возвращает объект:
[WebMethod]
public DivisionData ExtendedDivideNumbers(int a, int b) {
if (b == 0) {
throw new DivideByZeroException();
} else {
float res = (float)a / b;
string stamp = DateTime.Now.ToLongTimeString();
DivisionData d = new DivisionData();
d.result = res;
d.calculationTime = stamp;
return d;
}
}

Чтобы возвращаемый объект мог быть воспринят сценарием JavaScript, платформа ASP.NET AJAX должна его сериализовать в подходящий формат JSON.


Атрибут GenerateScriptType (определен в System.Web.Script.

Services [там же, где определены и атрибуты ScriptService и ScriptMethod]) сообщает платформе корректный тип представления объекта:
[System.Web.Script.Services.GenerateScriptType(typeof(DivisionData))]

Это все, что необходимо было добавить на стороне сервера. Исправленный программный код MathService.asmx приводится в примере 5.5.
Пример 5.5. Исправленный файл MathService
MathService.asmx
<%@ WebService Language="C#" Class="MathService" %>
using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
public class DivisionData
{
public float result;
public string calculationTime;
}
[WebService(Namespace = "http://hauser?wenz.de/AspNetAJAX/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
[System.Web.Script.Services.GenerateScriptType(typeof(DivisionData))]
public class MathService : System.Web.Services.WebService
{
[WebMethod]
public float DivideNumbers(int a, int b)
{
if (b == 0)
{
throw new DivideByZeroException();
}
else
{
return (float)a / b;
}
}
[WebMethod]
public DivisionData ExtendedDivideNumbers(int a, int b)
{
if (b == 0)
{
throw new DivideByZeroException();
}
else
{
float res = (float)a / b;
string stamp = DateTime.Now.ToLongTimeString();
DivisionData d = new DivisionData();
d.result = res;
d.calculationTime = stamp;
return d;
}
}
}

Обратное преобразование объекта DivisionData (десериализация) на стороне клиента выполняется автоматически.


Результаты обращения к веб-службе содержатся в свойствах result и calculationTime объекта DivisionData. Дополненный программный код JavaScript, который выполняет обращение к веб?службе, демонстрируется в примере 5.6.

Пример 5.6. Страница, принимающая от веб?службы данные
со сложной структурой
Complex.aspx
<%@ Page Language="C#" %>
"http://www.w3.org/TR/xhtml1/DTD/xhtml1?transitional.dtd"> ASP.NET AJAX


(body)
(asp:ScriptManager ID="ScriptManager1" runat="server")

(asp:ServiceReference Path="MathService.asmx" /)

(/asp:ScriptManager)



/

=


(br /)
onclick="callService(this.form);" />
(br /)



(/body)


К настоящему моменту вы узнали о специфических особенностях веб-служб, предлагаемых платформой ASP.NET AJAX, которые весьма сложно было бы реализовать исключительно средствами JavaScript.

Платформа ASP.NET AJAX прекрасно интегрируется с веб-службами .NET, обеспечивая удобный способ организации взаимодействий между клиентской (JavaScript) и серверной (ASP.NET) технологиями..



Оцените статью: (0 голосов)
0 5 0

Статьи из раздела ASP.NET AJAX на эту тему:
Веб-службы и Internet Explorer
Веб-службы и броузеры Mozilla
Веб-службы и броузеры обоих типов
Доступ к веб-службам из JavaScript
Методы страницы

Вернуться в раздел: ASP.NET AJAX / Веб-службы