WEB-сервисы XML

Web-сервис XML – это единица программного кода, доступная для вызова с помощью http-запросов. Обычно web-сервис представляет собой класс с некоторым количеством свойств и методов, которые, несмотря на стандартный синтаксис обращения к ним, организуют обмен данными с помощью xml-формата.

В дополнение к библиотеке, предоставляющей функциональные возможности web-сервиса, требуется некоторая инфраструктура поддержки:

·  Служба поиска, позволяющая клиентам выяснять местоположение web-сервиса XML;

·  Служба описания, позволяющая клиентам узнать функциональные возможности, которые может предложить web-сервис XML;

·  Транспортный протокол обмена данными.

Создание web-сервиса связано с созданием двух файлов:

·  Файл Service. asmx (имя может быть другим), в котором указывается cs-файл, содержащий различные функции web-сервиса.

<%@ WebService Language="C#" CodeBehind="~/App_Code/Service. cs" Class="Service" %>

·  Файл Service. cs, содержащий описание класса web-сервиса, а также различных типов данных, необходимых для его работы.

Простой web-сервис выглядит так:

using System;

using System. Web;

using System. Web. Services;

using System. Web. Services. Protocols;

[WebService(Namespace = "http://tempuri. org/")]

[WebServiceBinding(ConformsTo = WsiProfiles. BasicProfile1_1)]

public class Service : System. Web. Services. WebService

{

public Service () {

//Uncomment the following line if using designed components

//InitializeComponent();

}

[WebMethod]

public string HelloWorld() {

return "Hello World";

}

}

Метод, который предоставляется web-сервисом, называется HelloWorld. Указание атрибута [WebMethod] позволяет вызывать этот метод извне. При запуске web-сервиса браузер покажет следующую страницу:

Нажатие ссылки HelloWorld приведет к вызову метода, результат которого в виде xml-кода будет также отображен в браузере:

<string xmlns="http://tempuri. org/">

Hello World

</string>

В случае получения методом параметров, страница сгенерирует текстовые поля, в которые можно будет внести значения параметров. Например, пусть создается метод для регистрации пользователей:

[WebMethod(Description = "Метод регистрации пользователя")]

public bool Registration(string fam, string im, string address, string email, string login, string pass, string birth)

{

string MainConnectionString = "Provider=SQLOLEDB;…";

OleDbConnection con = new OleDbConnection(MainConnectionString);

con. Open();

// проверка наличия пользователя с вводимым логином

OleDbCommand comm = new OleDbCommand

("select * from customers where login='" + login + "'", con);

OleDbDataReader dr = comm. ExecuteReader();

if (dr. HasRows)

{

// введенный логин существует – отказано в регистрации

con. Close();

return false;

}

else

{

// добавление нового пользователя в таблицу

OleDbCommand comm1 = new OleDbCommand

("insert into customers (fam, im, addr, mail, login, pass,

birthday) values ('" + fam + "','" + im + "','" + address +

"','" + email + "','" + login + "','" + pass + "','" + birth

+ "')", con);

comm1.ExecuteNonQuery();

con. Close();

return true;

}

}

При обращении к методу Registration пользователь увидит форму:

Далее при нажатии кнопки «Запуск» будет произведено обращение к методу и получен ответ в виде true или false, записанного в xml-виде.

Получение информации из таблиц баз данных должно осуществляться с помощью типов данных, обычно структур, которые содержат описание одной записи таблицы. Например, запись о товаре книжного магазина может быть представлена структурой:

public struct InfoTovar

{

public string name_cat; // название категории товаров

public int id_book; // код книги

public string name_book; // название книги

public string author; // автор

public double price; // цена

}

Метод, который позволяет получить каталог товаров, должен формировать и получать массив объектов структуры тиа InfoTovar:

[WebMethod(Description = "Получение каталога товаров")]

public InfoTovar[] Catalog()

{

. . .

}

Результатом будет xml-файл такого вида:

<ArrayOfInfoTovar xmlns:xsi="http://www. w3.org/2001/XMLSchema-instance"

xmlns:xsd="http://www. w3.org/2001/XMLSchema"

xmlns="http://tempuri. org/">

<InfoTovar>

<name_cat>

Компьютерная литература

</name_cat>

<id_book>

1

</id_book>

<name_book>

Microsoft SQL Server 7.0. Разработка приложений

</name_book>

<author>

Ю. Тихомиров

</author>

<price>

100

</price>

</InfoTovar>

<InfoTovar>

<name_cat>

Компьютерная литература

</name_cat>

. . .

</InfoTovar>

</ArrayOfInfoTovar>

Результатом метода web-сервиса может быть также и объект DataSet, заполненный на сервере.