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

лекция. Зиборов. Справочник для опытных и как пособие для начинающих программистов. Компактдиск содержит исходные коды примеров из книги


Скачать 7.39 Mb.
НазваниеСправочник для опытных и как пособие для начинающих программистов. Компактдиск содержит исходные коды примеров из книги
Анкорлекция
Дата13.04.2023
Размер7.39 Mb.
Формат файлаdoc
Имя файлаЗиборов.doc
ТипСправочник
#1060897
страница24 из 31
1   ...   20   21   22   23   24   25   26   27   ...   31
Глава 15 Создание Web-служб и их клиентов

О Web-службах

Web-служба (от англ. Webservice) — это программная система (более конкрет­но — откомпилированная библиотека динамической компоновки, т. е. файл форма­та DLL в папке bin приложения), расположенная на удаленном сервере (компьюте­ре), к которой можно обращаться (потреблять сервис Web-службы) из своего клиентского компьютера. При этом возможности удаленной Web-службы будут реализованы в вашем Windows- или Web-приложении, а пользователь при доста­точной скорости трафика может даже не заметить обращения вашей программы к удаленному серверу. На удаленном компьютере могут находиться и программный код, и данные. Для передачи по Интернету вызовов методов Web-служб и резуль­татов их выполнения используется протокол SOAP (Simple Object Access Protocol). Протокол SOAP применяет формат сообщений, основанный на XML. Web-служба и протокол SOAP не зависят от конкретной платформы. Поэтому различные разра­ботчики могут использовать Web-службы друг друга, не беспокоясь о совместимо­сти операционных систем, технологий или языков программирования. Другое на­звание Web-службы — Web-сервис.

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



Рис. 15.1. Пять методов Web-сервиса по операциям с курсами валют

Для поиска Web-служб в Интернете существует несколько сайтов, в которых ; Web-службы регистрируются их провайдерами для того, чтобы их могли найти за­интересованные в них разработчики. Таким сайтом является, например: http://uddi.xml.org/uddi-org. Регистрация в каталоге UDDI бесплатна. Здесь, сегодня можно найти несколько десятков более или менее полезных Web-служб. В Сети можно найти и другие списки общедоступных Web-служб различных произво-ителей, например: http://www.xmethods.org/ve2/index.po. Список русскоязычных Web-служб можно найти по адресу: http://ivbeg.bestpersons.ru/feed/post3279396/.

Упрощенно говоря, Web-служба в среде .NET состоит из двух компонентов: ASMХ-файла и файла программной поддержки ASMX.cs. ASMX-файл содержит в себе информацию о методах Web-службы, о способах их тестирования, это можно посмотреть в любом Web-браузере. Файл программной поддержки написан на языке Visual С#, может быть скомпилирован для получения библиотеки DLL. Именно с расширением dll обеспечивает реализацию методов Web-службы. Например, на рис. 15.1 показано отображение в браузере Internet Explorer методов Web-службы, представленной в Сети по адресу:

http://webservice.webserviceshare.com/currencyconverter/rates.asmx.

Здесь перечислены пять методов Web-службы по операциям с текущими курсами валют. В создаваемом разработчиком клиентском приложении необходимо сделать ссылку на данный Web-сервер и таким образом включить в текущий проект удаленный класс. А затем в своем программном коде объявить создание нового экземпляра этого класса, и теперь можно уже обращаться ко всем методам класса.

Пример 110. Клиентское Web-приложение, потребляющее сервис Web-службы "Прогноз погоды"

В данном разделе создадим клиентское Web-приложение, потребляющее сервис Web-службы сайта http://www.webservicex.net/globalweather.asmx и продемонстрируем тем самым, что это — просто! Данная Web-служба возвращает прогноз погоды в городе, который пользователь задает в запросе к службе. Эта Web-служба поддерживает два метода (функции): GetСitiesByСountry и GetWeather (Рис. 15.2). На вход первой функции GetСitiesByСountry подают название страны, гдехотят получить прогноз погоды, а на выходе функции получают перечисление городов этой страны, для которых Web-служба готова сделать прогноз погоды.



Рис. 15.2. Два метода Web-службы прогноза погоды

На вход второй функции GetWeather подают названия города и страны, а на выходе функции получают XML-строку, содержащую прогнозируемые параметры погоды (листинг 15.1).

Листинг 15.1. XML-код, полученный из функции Getweatber





Moscow / Vnukovo , Russia (UUWW) 55-39N 037-16E



from the E (090 degrees) at 11 MPH (10 KT):0

1 mile(s):0

overcast

23 F (-5 C)

Windchill: 12 F (-11 C):l

23 F (-5 C)

100%


29.68 in. Hg (1005 hPa)


Success



Как видно из листинга, параметры погоды указываются в XML-элементах: тем­пература (Temperature), относительная влажность (RelativeHumidity), давление (Pressure) и проч. в Москве 9 декабря 2010 года на 8:30 по Гринвичу.

Напишем Web-приложение (также легко можно написать и Windows-приложе­ние), обращающееся к функции GetWeather данной удаленной Web-службы. Причем программный код должен быть минимальным и демонстрировать лишь прин­цип подключения и доступ к нужному элементу (например, температуре) XML-документа.

Для этой цели после запуска Visual Studio 2010 выберем проект шаблона Empty ASP.NET Web Application, укажем имя NameWebКлиентПогода. К текущему проекту добавим Web-форму. Для этого в пункте меню Project выберем команду Add New Item и в появившемся окне дважды щелкнем на шаблоне Web Form. Далее, попав в конструктор Web-формы, из панели элементов Toolbox перетащим кнопку Button, текстовое поле TextBox для вывода строки с данными XML и метку Label для вывода на нее значения температуры.

Теперь наступает ключевой момент, а именно — подключение ссылки на удаленную Web-службу, содержащую класс с необходимыми методами. Для этого в пункте меню Project выберем команду Add Web Reference. Этого пункта меню может не быть в меню Project, в этом случае выбираем Add Service Reference | Аdvanced | Add Web Reference. Также эту команду можно выбрать в контекстном меню окна Solution Explorer. В результате получим интерфейс, показанный на рис. 15.3. Здесь в поле URL введем адрес Web-службы: http://www.webservicex.net/ globalweather.asmx и щелкнем на кнопке Go.



Рис. 15.3. Поиск нужной Web-службы в Сети

Теперь в окне под полем URL мы увидим оба метода данного сервиса в том виде, как это было на рис. 15.2 (после нажатия на кнопку Go). При этом станет доступной кнопка Add Reference. Щелкнем на этой кнопке, после этого в окне Solution Explorer появится новый узел Web References со ссылкой на удаленный класс net.webservicex.www (рис. 15.4).



Рис. 15.4. В окне Solution Explorer появилась ссылка на удаленный класс

Теперь этот класс, содержащий необходимую нам удаленную Web-службу, мы можем использовать в своем программном коде (листинг 15.2).

Листинг 15.2. Web-приложение, обращающееся к сервису удаленной Web-службы прогноза погоды

// Web-приложение, потребляющее сервис удаленной Web-службы прогноза погоды. Приложение в текстовом

// поле TextBox демонстрирует XML-строку с параметрами погоды для города, указанного во входных параметрах

// при обращении к Web-службе. Также выводит в текстовую метку значение температуры в этом городе

using System;

using System.Web.Ul.WebControls;

// Другие директивы using удалены, поскольку они не используются в данной программе

namespace Пoroдa_Web

{

public partial class WebForm1 : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

Button1.Text = "Выяснить погоду"; Label1.Text = string.Empty;

TextBox1.TextMode = TextBoxMode.MultiLine;

Button1.Focus();

}

protected void Button1_Click(object sender, EventArgs e)

{

// Создаем клиентское приложение Web-службы:

// http://www.webservicex.net/globalweather.asmx.

// Эта Web-служба часто бывает перегужена и поэтому может выдать сообщение: "Server is too busy".

// Создание экземпляра прокси-класса:

var ПОГОДА = new net.webservicex.www.GlobalWeather();

// Эти три строчки - для отладки, чтобы лишний раз не "дергать" сервер:

// var Reader = new System.IO.StreamReader("С:\\Погода.xml");

// string Строка_ХМL = Reader.ReadToEnd() ;

// Reader.Close();

// Функция GetWeather запрашивает строковые параметры с названием

// города и страны и возвращает строку с XML-документом:

string Строка_ХML = ПОГОДА.GetWeather("Moscow", "Russia");

// Какая погода в Киеве:

// string Строка_ХМL = ПОГОДА.GetWeather("Kyiv", "Ukraine");

TextBox1.Text = Строка_ХМL;

var Документ = new System.Xml.XmlDocument();

// Загрузка строки XML в XML-документ

Документ. LoadXml (Строка_ХМL) ;

var Читатель = new System.Xml.XmlNodeReader(Документ);

string Имя = string.Empty; string Значение = string.Empty;

while (Читатель.Read() == true)

{ // Читаем последовательно каждый узел, выясняя тип узла:

if (Читатель.NodeType == System.Xml.XmlNodeType.Element)

Имя = Читатель.Name;

// Каждый раз запоминаем имя узла

if (Читатель.NodeType != System.Xml.XmlNodeType.Text) continue;

if (Имя == "Temperature") { Значение = Читатель.Value; break; }

} // Выход из цикла, когда прочитали данные узла "Temperature"

Label1.Text = "Температура воздуха в Москве: " + Значение;

}

}

}

Как видно, в программном коде при обработке события "щелчок на кнопке" Выяснить погоду создается экземпляр класса удаленной Web-службы. Далее про­исходит непосредственное обращение к методу класса GetWeather с входными параметрами город и страна, и метод GetWeather возвращает строку с XML-документом. Данную строку выводим в текстовое поле TextBox1. Для "расшифровки" XML-строки загружаем эту строку в XML-документ. Значение температуры находим в содержимом элемента Temperature, затем выводим значение температуры на метку Label1.

Фрагмент работы программы показан на рис. 15.5.



Рис. 15.5. Работа клиента Web-службы "Прогноз погоды"

Можно было бы вывести содержимое XML-документа на сетку данных GridView, тогда мы могли бы увидеть все параметры погоды в удобной таблице. Мы не стали этого делать, чтобы не загромождать программу и тем самым не "затуше­вать" главную идею, а именно обращение к удаленному классу, предоставленному Web-службой.

Таким образом, мы продемонстрировали создание клиентского Web-приложения, потребляющего сервис Web-службы. Замечу, что аналогичным обра­зом можно создавать и Windows-приложения (настольные приложения), которые также, будучи клиентами какой-либо Web-службы, могут получать, например, справочную информацию в онлайновом режиме.

Убедиться в работоспособности данной программы можно, открыв соответст­вующий файл решения в папке WebKлиeнтПoгoдa.

Пример 111. Клиентское Windows-приложение, использующее Web-службу "Прогноз погоды"

Теперь создадим клиентское Windows-приложение, потребляющее сервис той же Web-службы "Прогноз погоды", и продемонстрируем тем самым, что обращаться к удаленному классу можно не только из Web-приложения, но и из Windows-приложения (т. е. из настольного приложения).

Для решения этой задачи запустим Visual Studio 2010, выберем шаблон Windows Forms Application С#. В поле Name зададим имя WindowsKлиентПогодa. В конструкторе формы добавим кнопку Button, текстовое поле TextBox и метку Label.

Следующим этапом разработки клиентского приложения является добавление ссылки на удаленный класс искомой Web-службы. Для этого выберем в пункте меню Project команду Add Service Reference, это приведет к появлению диалогового окна Add Service Reference. В этом окне щелкнем кнопку Advanced, а затем кноп­ку Add Web Reference. В появившемся диалоговом окне Add Web Reference в поле URL введем адрес Web-службы: http://www.webservicex.net/globalweather.asmx и нажмем кнопку Go. В окне ниже увидим список доступных методов данного сер­виса, после этого щелкнем на кнопке Add Reference. При этом в окне Solution Ex­plorer появится ссылка на удаленный класс: net.webservicex.www. Теперь мы мо­жем использовать эту ссылку в программном коде (листинг 15.3).

Листинг 15.3. Windows-приложение, использующее сервис удаленной Web-службы прогноза погоды

// Windows-приложение, потребляющее сервис удаленной Web-службы прогноза погоды. Приложение в текстовом

//поле TextBox демонстрирует XML-строку с параметрами погоды для города, указанного во входных параметрах

// при обращении к Web-службе. Также выводит в текстовую метку значение температуры в этом городе

using System;

using System.Collections.Generic;

using System.Linq;

using System.Windows.Forms;

// Другие директивы using удалены, поскольку они не используются в данной программе

namespace WebКлиентПогода

{

public partial class Form1:Form

{

public Form1()

{

InitializeComponent();

// Добавляем внешнюю ссылку на Web-службу таким образом:

// Проект - Добавить ссылку на службу - Дополнительно -

// Добавить веб-ссылку http://www.webservicex.net/globalweather.asm

Button1.Text = "Выяснить погоду"; label1.Text = string.Empty;

textBox1.Multiline = true;

button1.Focus();

}

private void button1_Click(object sender, EventArgs e)

{ // Создание экземпляра прокси-класса:

var ПОГОДА = new net.webservicex.www.GlobalWeather();

// Эти три строчки - для отладки, чтобы лишний раз не "дергать" сервер:

//var Reader = new System.IO.StreamReader("С:\\Погода.xml");

//string Строка_ХМL = Reader.ReadToEnd();

//Reader.Close();

// Функция GetWeather запрашивает строковые параметры с названием

// города и страны и возвращает строку с XML-документом:

string Cтрока_XML =. ПОГОДА.GetWeather("Moscow", "Russia");

// Какая погода в Киеве:

// string Cтрока_XML = ПОГОДА.GetWeather("Kyiv", "Ukraine");

textBox1.Text = Строка_ХМL;

// Здесь считывание значения узла из XML-строки выполено более эффективно:

var ХМL_элемент = System.Xml.Linq.XElement.Parse(Cтрока_XML);

string Значение = ХМL_элемент.Element("Temperature").Value;

label1.Text = "Температура воздуха в Москве: " + Значение;

}

}

}


1   ...   20   21   22   23   24   25   26   27   ...   31


написать администратору сайта