Использование 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.or g/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.or g/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 System.ComponentModel; 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("Вы ошиблись при авторизации"); } } } . } . .