ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 29.10.2023
Просмотров: 113
Скачиваний: 3
-
Цель.
-
Обеспечение
-
Что делать
-
Создаем проект WPF (мы будем использовать особенности WPFпри реализации пользовательского интерфейса).
-
Добавляем ссылку на SOAP-сервис, который нам требуется использовать (щелчком правой кнопки мыши в «Обозревателе решений» вызываем Добавить (Add)\Ссылку на службу (AddServiceReference). В появившемся окне нажимаем «Дополнительно». В появившемся окне нажимаем «Добавить Web-ссылку», в следующем окне в поле URL-Адрес вводим http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL и нажимаем кнопку «Перейти». После успешного перехода (это будет выглядеть как на рис.2) нажимаем кнопку «Добавить ссылку».
| | |
Рис. 3. Фрагмент WSDL-спецификации и соответствующего обработчика ссылки на службу.
-
Создаем класс, который в пределах нашего приложения будет являться информационным экспертом по предоставлению ежедневных данных Центробанка. Оснастим его свойством, отвечающим за доступ к Веб-сервису. Основной интерфейс, посредством которого осуществляются все обращения в WSDLи, соответственно, в обозревателе объектов VSназывается DailyInfo.
-
Далее нам требуется обратиться к созданному экземпляру DailyInfo за сведениями (в нашем случае это курс выбранной валюты на дату), получить эти сведения и расшифровать их. Спецификация интересующего нас метода в документации к веб-сервису (http://www.cbr.ru/scripts/Root.asp?PrtId=DWS) выглядит так.
-
Реализуем наши методы (ниже приведен код ExtractCurrencyRate, написание заглушек, а также реализацию для первого метода следует сделать самостоятельно).
-
Можно вызвать созданный метод. Несмотря на то, что проект WPFи настраивает на несколько другой образ действий, поступим по старинке: разместим на форме текстовый блок и кнопку, добавим кнопке обработчик нажатия, который будет отображать результат GetCurrencyRateOnDate в текстовом блоке.
К сожалению, документация о наименованиях валют на сайте ЦБР не актуальна, но текстовый код нужной валюты можно посмотреть, добавив в качестве контрольного значения переменную dt.
-
Можно заметить, что во время запроса наша нехитрая программа не отвечает («подвисает» - более привычное выражение).
-
Создаем метод, который будет инициировать на веб-сервисе начало асинхронной операции.
, значения свойств которого могут автоматически привязываться к интерфейсным элементам этой формы (такая привязка называется Binding).
CBRService cbr = newCBRService();
public MainWindow()
{
InitializeComponent();
DataContext = cbr;
}
13. Изменим XAML-код формы, так чтобы значение свойства текст для текстового блока было связано с последним запрошенным курсом валюты из CBRService.
14. Научим наш сервис уведомлять своих клиентов об изменении значений свойств. Для этого добавим к его списку наследования/реализации интерфейсINotifyPropertyChanged.Интерфейс INotifyPropertyChanged используется для уведомления клиентов, обычно клиентов – участников привязки, об изменении значения свойства.
publiceventPropertyChangedEventHandler PropertyChanged;
privatevoid NotifyPropertyChanged(String propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, newPropertyChangedEventArgs(propertyName));
}
}
15. Изменим метод записи свойства LastQueriedRate таким образом, чтобы при изменении значения этого свойства вызывался метод NotifyPropertyChanged.
set
{
if (lastQueriedRate == value) return;
lastQueriedRate = value;
NotifyPropertyChanged("LastQueriedRate");
}
16. Запускаем программу и смотрим. Она немного приостанавливается в момент вызова, но не так надолго как при синхронном вызове.
-
Что делать, если закончили.
-
Поискать в спецификации методов на сайте ЦБР способ получить от сервиса текстовые обозначения валют. Видоизменить программу таким образом, чтобы она возвращала курс выбранной валюты на выбранную пользователем дату. -
Замерить время работы асинхронного и синхронного метода ( «подвисание» при асинхронном вызове связано со временем, требующимся на разбор данных полученных от сервиса). -
Реализовать возврат значения CBRService при асинхронном вызове без использования INotifyPropertyChanged, через стандартный механизм событий. -
Реализовать при этом обработку исключений с доставкой данных об исключении совершившему асинхронный вызов клиенту.
-
Связанныеопределения.
Сервис-ориентированная архитектура — модульный подход к разработке программного обеспечения, основанный на использовании распределённых, слабо связанных заменяемых компонентов, оснащённых стандартизированными интерфейсами для взаимодействия по стандартизированным протоколам.Программные комплексы, разработанные в соответствии с сервис-ориентированной архитектурой, обычно реализуются как набор веб-служб.Веб-служба, веб-сервис — идентифицируемая веб-адресом программная система со стандартизированными интерфейсами.XML-RPC (сокр. от англ. Extensible Markup Language Remote Procedure Call — XML-вызов удалённых процедур) — стандарт/протокол вызова удалённых процедур, использующий XML для кодирования своих сообщений и HTTP в качестве транспортного механизма. XML-RPC, как и любой другой интерфейс Remote Procedure Call (RPC), определяет набор стандартных типов данных и команд.SOAP — протокол обмена структурированными сообщениями в формате XML в распределённой вычислительной среде. SOAP является расширением протокола XML-RPC.Пример SOAP-запроса [https://ru.wikipedia.org/wiki/SOAP]:
12345
12345
Стаканграненый
9.95
840