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

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