Для того чтобы разобраться как работать с веб сервисами нет ничего лучше чем практический пример. Давайте попробуем получить погоду в нашем регионе, используя веб сервис http://www.webservicex.com/globalweather.asmx?wsdl
Сначала добавим статическую ссылку к нам в конфигурацию.
Назовем ее «Погода». Если вы теперь откроете эту статическую ссылку, то увидите
приблизительно такую структуру данных этого веб сервиса
Нас интересуют операции: GetWeather и GetCitiesByCountry с соответствующими параметрами (по их названиям не трудно догадаться какие данные возвращают эти операции). К сожалению, отсутствует операция, которая выдает перечень стран. Ну, ничего, думаю, как на английском будет Россия, и Украина мы знаем.
Теперь создадим обработку, которая будет получать список городов и получать погоду для выбранного города.
Внешний вид ее будет довольно простой, список стран (Украина и Россия), список доступных городов для этих стран (будем получать от веб сервиса) и погода для конкретного города (получаем от веб сервиса). Внешний вид такой:
Теперь напишем код для получения списка городов из нашего веб сервиса. На скриншоте стрелками показано куда, и какую информацию нужно вносить, чтобы мы могли обработать ответ веб сервиса. Веб сервис возвращает ответ в виде ХМЛ. Я сначала его сохраняю в файл, а потом разбираю.
код процедуры получения списка городов следующий:
&НаСервере Процедура СписокГородов(Страна) города.Очистить(); // очищаем список городов Прокси = WSСсылки.Погода.СоздатьWSПрокси("http://www.webserviceX.NET",
"GlobalWeather", "GlobalWeatherSoap"); РезультатВебОперации = Прокси.GetCitiesByCountry(Страна); //записать результат в файл текст= новый ТекстовыйДокумент ; текст.УстановитьТекст(РезультатВебОперации); текст.Записать("City.xml"); //теперь прочитаем файл // в узле с именем City находиться название города //его и записываем в таблицу Чтение = Новый ЧтениеXML; Чтение.ОткрытьФайл("City.xml"); Пока Чтение.Прочитать() Цикл Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда ИмяУзла = Чтение.Имя; если ИмяУзла="City" тогда естьНазвание=1; иначе естьназвание=0; конецесли; Пока Чтение.ПрочитатьАтрибут() Цикл ТипУзла = Чтение.ТипУзла; Имя = Чтение.Имя; Значение = Чтение.Значение; КонецЦикла; ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.Текст Тогда если естьНазвание=1 тогда строка=города.Добавить(); строка.Название=Чтение.Значение; конецесли; ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда КонецЕсли; КонецЦикла; города.Сортировать("Название"); КонецПроцедуры
При активизации любой строки со списком городов вызываем следующий код:
&НаСервере Процедура Погода(город,страна); этаформа.Погода.Очистить(); Прокси = WSСсылки.Погода.СоздатьWSПрокси("http://www.webserviceX.NET", "GlobalWeather", "GlobalWeatherSoap"); РезультатВебОперации = Прокси.GetWeather(город,страна);
текст= новый ТекстовыйДокумент ; текст.УстановитьТекст(РезультатВебОперации); текст.Записать("weather.xml"); Чтение = Новый ЧтениеXML; Чтение.ОткрытьФайл("weather.xml"); Пока Чтение.Прочитать() Цикл Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда ИмяУзла = Чтение.Имя; если ИмяУзла"CurrentWeather" тогда естьНазвание=1; иначе естьназвание=0; конецесли; Пока Чтение.ПрочитатьАтрибут() Цикл ТипУзла = Чтение.ТипУзла; Имя = Чтение.Имя; Значение = Чтение.Значение; КонецЦикла; ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.Текст Тогда если естьНазвание=1 тогда строка=погода.Добавить(); строка.Параметр=ИмяУзла; строка.Значення=Чтение.Значение; конецесли; ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда КонецЕсли; КонецЦикла; КонецПроцедуры
Он практически идентичен предыдущему, только сейчас мы обращаемся к операции GetWeather, и получаем данные погоды в конкретном городе.
В принципе это минимум для работы с веб сервисами.