Использование web-сервисов XML в клиентских приложениях

Клиентом web-сервиса XML может быть не только web-сайт, но и обычное приложение. Использование web-сервиса возможно при подключении ссылки на него через опцию проекта “Add Web Reference”. В результате выбора из доступных web-сервисов требуемого будут сгенерированы папки Web References\localhost внутри проекта, в которых окажутся файлы. wdsl, .disco и Reference. cs, описывающие работу с web-методами и типами данных, предоставляемыми web-сервисом. Файлы описания используют язык xml:

Файл Reference. cs вводит новое пространство имен имя_проекта. localhost, в котором определяет класс-оболочку для web-сервиса:

public partial class Service :

System. Web. Services. Protocols. SoapHttpClientProtocol

в котором задаются методы синхронного и асинхронного вызова web-методов web-сервиса.

Например, для метода HelloWorld методы его вызова будут такими:

[System. Web. Services. Protocols. SoapDocumentMethodAttribute("http://tempuri. org/HelloWorld", RequestNamespace="http://tempuri. org/", ResponseNamespace="http://tempuri. org/", Use=System. Web. Services. Description. SoapBindingUse. Literal, ParameterStyle=System. Web. Services. Protocols. SoapParameterStyle. Wrapped)]

public string HelloWorld()

{

object[] results = this. Invoke("HelloWorld", new object[0]);

return ((string)(results[0]));

}

Вызов метода web-сервиса осуществляется с помощью метода Invoke, в котором первым параметром указывается имя метода, а вторым параметром – массив типа object параметров, передаваемых web-методу. Функции асинхронного вызова работают по принципам технологии Ajax и называются как web-метод с добавлением суффикса Async, например, HelloWorldAsync.

НЕ нашли? Не то? Что вы ищете?

При передаче параметров web-методу функция вызова также будет получать параметры, например, при регистрации нового пользователя:

[System. Web. Services. Protocols. SoapDocumentMethodAttribute("http://tempuri. org/Registration", RequestNamespace="http://tempuri. org/", ResponseNamespace="http://tempuri. org/", Use=System. Web. Services. Description. SoapBindingUse. Literal, ParameterStyle=System. Web. Services. Protocols. SoapParameterStyle. Wrapped)]

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

{

object[] results = this. Invoke("Registration", new object[] {

fam, im, address, email, login, pass, birth});

return ((bool)(results[0]));

}

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

public partial class InfoTovar {

private string name_catField;

private int id_bookField;

private string name_bookField;

private string authorField;

private double priceField;

public string name_cat {

get {

return this. name_catField;

}

set {

this. name_catField = value;

}

}

public int id_book {

get {

return this. id_bookField;

}

set {

this. id_bookField = value;

}

}

public string name_book {

get {

return this. name_bookField;

}

set {

this. name_bookField = value;

}

}

public string author {

get {

return this. authorField;

}

set {

this. authorField = value;

}

}

public double price {

get {

return this. priceField;

}

set {

this. priceField = value;

}

}

}

В результате для применения web-методов, предоставляемых web-сервисом, в приложении достаточно подключить новое пространство имен, которое определяется файлом Reference. cs, создать объект класса-оболочки web-сервиса и вызывать по необходимости его методы:

using System;

using System. Collections. Generic;

using ponentModel;

using System. Data;

using System. Drawing;

using System. Text;

using System. Windows. Forms;

// подключение пространства имен web-сервиса

using WindowsApplication1.localhost;

namespace WindowsApplication1

{

public partial class Form1 : Form

{

// создание объекта web-сервиса

private Service serv = new Service();

int isAuto = 0;

// метод выбора пункта меню авторизации

private void авторизоватьсяToolStripMenuItem_Click

(object sender, EventArgs e)

{

// вызов диалога авторизации

Autorization dlg = new Autorization();

if (dlg. ShowDialog() == DialogResult. OK)

{

// чтение введенных логина и пароля

string login = dlg. Login;

string passw = dlg. Password;

// вызов web-метода авторизации с введенными даннми

if ((isAuto = serv. Autorization(login, passw))>0)

{

// сообщение об успешной авторизации

menuStrip1.Items[0].Enabled = false;

MessageBox. Show("Поздравляю! Вы авторизованы!");

}

else

{

// сообщение об ошибке при авторизации

MessageBox. Show("Вы ошиблись при авторизации");

}

}

}

. . .

}