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



Скачать 46,51 Kb.
Дата18.10.2016
Размер46,51 Kb.
Использование 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 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("Вы ошиблись при авторизации");

}
}


}

. . .


}

Поделитесь с Вашими друзьями:


База данных защищена авторским правом ©grazit.ru 2017
обратиться к администрации

    Главная страница