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

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


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

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

В программном коде при обработке события "щелчок на кнопке" button1 создаем экземпляр удаленного класса погода, а затем обращаемся к методу класса GetWeather, подавая на вход метода страну и город (Russia и Moscow), для которогс i хотим вяснить прогноз погоды. Этот метод возвращает строку XML. Эту XML строку мы выводим в текстовое поле textBox1, так же, как мы это делали в Web-приложении, однако извлекаем из узла Temperature прогнозируемое значение температуры более эффективным образом, используя методы технологии Linq. Фрагмент работы программы представлен на рис. 15.6. Убедиться в работоспособности программы можно, открыв решение в папке WindowsKлиентПогода.

Пример 112. Создание простейшей Web-службы

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

Для решения этой задачи запустим Visual Studio 2010, выберем шаблон Empty ASP.NET Web Application, зададим имя, например, WebCлyжбaCyммa. Затем в меню Project выберем команду Add New Item, в появившемся окне укажем шаб­лон Web Service и щелкнем на кнопке Add. Сразу после этого попадаем на вкладку WebServicel.asmx.cs готовой Web-службы "Hello World", и уже ее можно тестиро­вать. Содержимое этой вкладки приведено в листинге 15.4.

Листинг 15.5. Создание простейшей Web-службы

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.Services;

namespace WebСлужбаСумма

{

///

/// Summary description for WebServicе1

///


[WebService(Namespace = "http://tempuri.org/")]

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

[System.ComponentModel.ToolboxItem(false)]

//To allow this Web Service to be called from script, using ASP.NET AJAX,

// uncomment the following line.

// [System.Web.Script.Services.ScriptService]

public class WebService1 : System.Web.Services.WebService

{

[WebMethod]

public string HelloWorld()

{

return "Hello World";

}

}

}

Однако "HelloWorld — это другая задача, разработчики Visual Studio 2010 включили ее для облегчения программистам освоения данной технологии. Нас ин­тересует именно наша задача, поэтому изменим файл программной поддержки, как показано в листинге 15.5.

Листинг 15.5. Простейшая Web-служба

/ / На входе данной Web-службы предлагается ввести два числа, а Web-служба берет на себя функцию сложения

//этих двух чисел и вывода (возврата) суммы. При этом Web-служба производит диагностику вводимых данных

using System; .

using System.Web.Services;

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

namespace WebApplication1

{

///

/// Summary description for WebService1

///


[WebService(Namespace = "http://tempuri.org/")]

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.Toolboxltem(false) ]

// To allow this Web Service to be called from script, using ASP.NET AJAX,

// uncomment the following line.

// [System.Web.Script.Services.ScriptService]

public class WebService1 : System.Web.Services.WebService

{

[WebMethod]

public string Сумма(string Число1, string Число2)

{ // Входные параметры объявляем типа string, чтобы принимать

// от пользователя любые символы, анализировать их и при

// "плохом вводе" сообщать по-русски.

Single X, Y;

bool Число_ли = Single.TryParse( Число1, System.Globalization.NumberStyles.Number,

System.Globalization.NumberFormatlnfо.Currentlnfo, out X);

if (Число_ли == false) return "В первом поле должно быть число";

Число_ли = Single.TryParse(Число2, System.Globalization.NumberStyles.Number,

System.Globalization.NumberFormatlnfo.Currentlnfо, out Y) ;

if (Число_ли == false) return "Во втором поле должно быть число";

Single Z = X + Y;

return "Сумма = " + Z.ToString();

}

}

}

Как видно из текста программы, мы не программировали никакой пользова­тельский интерфейс. У нас здесь нет ни формы, ни кнопок, ни текстовых полей. Уже отсюда понятно, что Web-служба — это удаленный класс, к которому можно подключиться через Интернет из своего, например, Windows- или Web-приложения. На вход функции сумма пользователь Web-службы подает два числа, которые принимаются функцией как две строки. Функция Single.TryParse проверяет, числовые ли символы содержатся во введенных строках, и если это так, то происходит преобразование строковых переменных в переменные типа Single.

Теперь можем протестировать данную Web-службу, для этого нажмем клавишу <F5>. При этом Web-браузер откроет ASMX-файл. Здесь мы увидим единственный метод этой Web-службы — сумма. Щелчок указателем мыши на этой гиперссылке обеспечит возможность тестирования нашей Web-службы (рис. 15.7).

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

Убедиться в работоспособности данной Web-службы можно, открыв в папке WebСлужбаСумма соответствующий файл решения.



Рис. 15.7. Тестирование созданной Web-службы

Пример 113. Создание Windows-приложения — потребителя сервиса Web-службы

Теперь напишем Windows-приложение (т. е. создадим ехе-файл), который бу­дет обращаться к Web-службе, написанной в предыдущем разделе. Такое приложение можно называть клиентским. Для этого запустим Visual Studio 2010, выберем шаблон Windows Forms Application С# (можно даже Console Application), ука­жем имя проекта WebКлиентСумма. Из панели Toolbox перенесем в форму командную кнопку Button. Запланируем, что вся работа с удаленной Web-службой будет происходить при обработке события "щелчок на кнопке" Пуск.

Чтобы сделать Windows-приложение потребителем сервиса Web-службы, не­обходимо в его проекте создать Web-ссылку на удаленный класс. Для этого выберем в пункте меню Project (или в контекстном меню окна Solution Explorer) команду Add Service Reference, это приведет к появлению диалогового окна Add Service Reference. В этом окне нажмем кнопку Advanced, а затем в следующем кне кнопку Add Web Reference.

Поскольку мы отлаживаем и Web-службу, и его клиентское приложение на одном локальном компьютере, в поле URL пишем виртуальный адрес ASMX-файла. Этот адрес мы можем получить, запустив нашу Web-службу из предыдущего раздела, а затем скопировав в буфер обмена его URL-адрес. Для локального компьютера, на котором автор отлаживал данный пример, URL-адрес был таким: http://Iocalhost: 1611/Servicel .asmx.

Затем нажмем кнопку Go и тем самым получим доступ к кнопке Add Reference, после щелчка на которой в окне Solution Explorer добавится значок ссылки на класс localhost, обеспечивающий доступ к Web-службе (рис. 15.8).



Рис. 15.8. Добавление ссылки на класс localhost

Если посмотреть на этот класс через браузер объектов View in Object Browser (используя контекстное меню в окне Solution Explorer), то можно увидеть все свойства, методы и события, которые содержатся в этом классе. Теперь, когда в наш проект добавлена ссылка на удаленный класс, мы можем вызывать методы этого класса в нашей программе (листинг 15.6).

Листинг 15.6. Windows-приложение, потребляющее сервис Web-службы

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

using System;

using System.Windows.Forms;

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

namespace WebKлиентСумма

{

public partial class Form1:Form

{

public Form1()

{

InitializeComponent();

Button1.Text = "Пуск";

}

private void button1_Click(object sender, EventArgs e)

{ // Чтобы добавить Web-службу к обычному Windows-приложению:

// Project | Add Service Reference | Advanced | Add Web Reference,

// затем в поле URL пишем виртуальный адрес Web-службы

// http://localhost:1611/Servicel.asmx.

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

var Удаленный = new localhost.WebService1();

string Sum = Удаленный.Сумма("23,5", "11,4");

MessageBox.Show(Sum);

}

}

}

Как видно из программного кода, при обработке события "щелчок мышью" на кнопке Пуск создаем экземпляр удаленного класса и обращаемся к его функции (методу) сумма. При этом при вводе чисел специально одно из них пишем через десятичную точку, а другое — через запятую для тестирования возможности ввода чисел обоими способами.

Результат работы программы представлен на рис. 15.9.



Рис. 15.9. Обращение Windows-приложения к Web-службе

Убедиться в работоспособности программы можно, открыв соответствующий sln-файл решения в папке WebКлиентСумма.

Пример 114. Web-служба "Торговая рекомендация на рынке Forex"

Создадим Web-службу, обеспечивающую торговой рекомендацией участников международного валютного рынка Forex. Как известно, любой желающий через Интернет, используя соответствующее программное обеспечение, может подклю­читься к этому рынку и совершить либо покупку какой-либо валютной пары (например, евро-доллар, EUR/USD), либо ее продажу. И в зависимости от правильно выбранного направления движения цены либо получить прибыль, либо убыток. Существует множество сайтов, где выкладываются рекомендуемые торговые стра­тегии работы на рынке Forex на текущую европейскую или американскую сессию. Иапример, мы доверяем какому-нибудь из таких сайтов, скажем, сайту http://www.forex-rdc.ru/subscribers.php?action=prognoz, и решаем руководство­ваться его рекомендациями. Кроме того, мы создаем Web-службу, которая с помощью синтаксического разбора указанной выше Web-страницы будет извлекать торговую стратегию, рекомендованную данным сайтом на текущий день. Поскольку в нашей книге мы должны привести очень краткий и выразительный пример, то ог­раничимся торговой рекомендацией только для одной валютной пары EUR/USD.

Для решения этой задачи запутим Visual Studio 2010, выберем шаблон ASP.NET Empty Web Application С#, зададим имя — WebСлуж6aForex. Далее в пункте меню Project выберем пункт Add New Item и в появившемся окне дважды щелкнем на шаблоне Web Service. Мы получим простейшую Web-службу "Hello World". Однако мы ее изменим согласно условию нашей задачи. Содержимое файлa программной поддержки приведено в листинге 15.7.

Листинг 15.7. Web-служба "Торговая рекомендация на рынке Forex"

// Web-служба, которая с помощью синтаксического разбора Web-страницы

// http://www.forex-rdc.ru/subscribers.php?action=prognoz

// извлекает торговую рекомендацию на рынке Forex для валютной пары EUR/USD, предлагаемую данным сайтом

// на текущий день, и выводит ее потребителю сервиса Web-службы в виде строки

using System;

using System.Web.Services;

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

namespace WebCлуж6aForex

{

///

/// Summary description for WebService1

///


[WebService(Namespace = "http://tempuri.org/")]

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

[System.ComponentModel.Toolboxltem(false)]

//To allow this Web Service to be called from script, using ASP.NET AJAX,

// uncomment the following line.

// [System.Web.Script.Services.ScriptService]

public class WebService1: System.Web.Services.WebService

{

[WebMethod]

public string Рекомендация()

{ // Создаем объект для чтения Web-страницы:

var КЛИЕНТ = new System.Net.WebClient();

// Чтобы русские буквы читались корректно, объявляем объект Кодировка:

var Кодировка = System.Text.Encoding.GetEncoding(1251);

System.IO.Stream ПОТОК;

string СТРОКА;

try

{ // Попытка открытия Web-ресурса:

ПОТОК = КЛИЕНТ.OpenRead( "http://www.forex-rdc.ru/subscribers.php?action=prognoz");

}

catch (Exception Ситуация)

{

СТРОКА = string.Format("Ошибка открытия www.forex-rdc.ru\r\n{0)", Ситуация);

return СТРОКА;

}

// Чтение HTML-разметки Web-страницы:

var Читатель = new System.IO.StreamReader(ПОТОК, Кодировка);

// Копируем HTML-разметку в строковую переменную:

СТРОКА = Читатель.ReadToEnd();

// Ищем в разметке страницы фрагмент с указанной строкой:

int i = СТРОКА.IndexOf("Торговая стратегия:");

// Ищем стратегию только для EUR/USD:

СТРОКА = CTPOKA.Substring(i, 120);

// Удаляем HTML-разметку:

i = СТРОКА.IndexOf("");

СТРОКА = СТРОКА.Remove(i) ;

СТРОКА = CTPOKA.Replace("
", "");

// Вставляем текущую дату:

СТРОКА = СТРОКА.Replace("стратегия:", "стратегия для EUR/USD на " +

DateTime. Now. ToLongDateStr ing () + ":\r\ari");

ПОТОК.Close();

return СТРОКА;

}

}

}

Как видно из программного кода, данная Web-служба содержит в себе один метод Рекомендация (), который не имеет входных параметров. В начале метода соз­даем экземпляр класса WebClient для чтения и последующего синтаксического раз­бора Web-страницы. Вообще говоря, Web-страница может быть записана на машинном носителе в какой-либо кодировке. Чаще всего это Unicode (UTF-8), рус­скоязычные сайты часто имеют кодировку Windows 1251. Чтобы выяснить, в какой кодировке записана Web-страница, следует в браузере в контекстном меню навести указатель мыши на пункт меню Кодировка.

При чтении Web-страницы создаем объект поток, используя URL-адрес стра­ницы, и объект кодировка для корректного отображения кириллицы. После копи­рования HTML-разметки страницы в строковую переменную строка ищем в разметке страницы раздел с торговой стратегией для EUR/USD с помощью строковых операции.

Теперь запустим созданную Web-службу, нажав клавишу <F5>. Если формальных ошибок нет, мы получим отображение ASMX-файла в браузере (рис. 15.10).


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


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