Автор: Dflying Chen ( http://dflying.cnblogs.com/ )
В предыдущей статье (Вызов веб-службы в ASP.NET Atlas — создание гибридного приложения для вызова удаленного веб-сервиса (базовые знания и простой пример)) я представил некоторые базовые знания о гибридном веб-сервисе для удаленного веб-сервиса в Atlas и привел самый простой пример. это вообще бесполезно. Возвращаясь сегодня к этой теме, приведу более сложный, но в некоторой степени полезный пример — Yahoo! Weather.
Хватит чепухи, давайте сначала познакомимся с сервисом погоды Yahoo!: Yahoo! предоставляет сервис прогноза погоды на своем веб-сайте ( http://weather.yahoo.com/ ), а также предоставляет интерфейс веб-сервиса ( http :/). /developer.yahoo.com/weather/ )
Из двух вышеупомянутых веб-страниц мы можем узнать, что URL-адрес службы погоды, предоставляемой Yahoo!, — http://xml.weather.yahoo.com/forecastrss . Служба также имеет два параметра:
p: код местоположения, где находится. необходимо запросить погоду (вы можете проверить этот код в разных местах на http://weather.yahoo.com/ ).
u: единица измерения температуры в возвращаемом результате, f представляет градусы Фаренгейта, а c представляет собой градусы Цельсия.
Кажется, что этот сервис Yahoo! Weather довольно прост. Давайте проверим, хорошо ли он работает. Сначала зайдите на http://weather.yahoo.com/ и узнайте, что код города Шанхай — CHXX0116. Затем введите http://xml.weather.yahoo.com/forecastrss?p=CHXX0116&u=c в браузере. Возвращается следующий не очень сложный XML:
Yahoo Weather Service XML Result.
<канал>
http://us.rd.yahoo.com/dailynews/rss/weather/Shanghai__CH/*http://xml.weather.yahoo.com/forecast/CHXX0116_c.html
<изображение>
<ширина>142ширина>
<высота>18высота>
<ссылка>http://weather.yahoo.com/
изображение>
<предмет>
http://us.rd.yahoo.com/dailynews/rss/weather/Shanghai__CH/*http://xml.weather.yahoo.com/forecast/CHXX0116_c.html
<описание>
" />
Текущие условия:
Туман, 21 С
Прогноз:
Чт — рассеянные грозы Высокая: 25 Низкая: 20
Пт – утро. Дожди: 26. Температура воздуха: 18.
Полный прогноз на Yahoo! Погода
(предоставлено The Weather Channel)
]]>
описание>
канал>
Мы видим, что информация, которую он предоставляет, очень полная (даже время восхода и захода солнца... ) , давайте напишем страницу asbx Bridge для создания мэшапа этой службы.
Во-первых, обратившись к оператору asbx в статье «Вызов веб-службы в ASP.NET Atlas — создание гибридного приложения для вызова удаленной веб-службы (базовые знания и простой пример»), мы можем написать следующий абзац:
<имя метода="GetWeather">
<вход>
<имя параметра="p" />
<имя параметра="u" значение="c" />
вход>
метод>
мост>
в:
Атрибуты namespace и className
Атрибут serviceUrl
Метод GetWeather определяет два параметра p и u, перечисленные выше. Мы указали значение параметра u по умолчанию как c (представляющее градусы Цельсия), и параметр p будет передан вызывающей стороной.
На самом деле этого шага достаточно. Клиент получит строку XML, показанную в браузере выше, и ее можно будет обработать и отобразить на клиенте. Но обработка XML клиентом не так уж проста и эффективна, а передача слишком большого количества ненужной информации по сети также является пустой тратой. Итак, здесь мы используем встроенный в asbx Transformer для обработки этого XML, извлечения интересующего нас контента и отправки его клиенту в виде JSON. Добавьте следующий абзац в раздел
<данные>
словарь>
<название словаря="selectedNodes">
словарь>
данные>
трансформировать>
трансформации>
Оператор
name — это сегмент атрибута селектора, а указанный атрибут value — это выражение XPath, которое выберет сегмент данных, который будет использоваться всем XPathBridgeTransformer.
name — это сегмент словаря namespaceMapping, который определяет сопоставление пространства имен в этом XML-файле. Если мы используем определенное пространство имен в следующем процессе выбора узла, то его объявление должно быть здесь. Здесь мы добавляем маппинг для yweather, потому что он будет использоваться ниже.
name — это сегмент словаря selectedNodes, где атрибут value каждого элемента — это строка XPath, используемая для выбора соответствующего значения из XML, а атрибут name используется для указания соответствующего имени атрибута в JavaScript. В качестве примера я получил только три фрагмента контента. Вы можете видеть, что указанное выше отображение пространства имен используется в XPath CurrentCondition.
Я не буду вдаваться в подробности о XPath. Друзья, которые заинтересованы или не знакомы с ним, могут сами погуглить. В Интернете существует множество ресурсов. Я не очень знаком с другими типами Трансформеров. Я расскажу о них, если столкнусь с ними в будущем. Завершенный файл YahooWeatherBridge.asbx выглядит следующим образом:
<имя метода="GetWeather">
<вход>
<имя параметра="p" />
<имя параметра="u" значение="c" />
вход>
<трансформирует>
<данные>
словарь>
<название словаря="selectedNodes">
словарь>
данные>
трансформировать>
трансформации>
метод>
мост>
Теперь создайте страницу ASP.NET для тестирования. Во-первых, ScriptManager повторяется тысячу раз, а также ссылка на Bridge:
<Услуги>
Услуги>
Затем есть элемент HTML Select, в котором перечислены несколько городов и соответствующие им коды городов:
<выбрать идентификатор="место">
выбрать>
HTML-кнопка, используемая для запуска вызова службы:
Для отображения результата используется фрагмент HTML:
Затем идет JavaScript. Вы можете видеть, что Mashup вызывается через Dflying.YahooWeatherService.GetWeather(), и преобразованное значение выводится на страницу после возврата метода: function getWeather_onclick() {.
// новый элемент управления «Выбрать» атласа
var место = новый Sys.UI.Select($('place'));
// вызываем метод моста
Dflying.YahooWeatherService.GetWeather({'p': Place.get_selectedValue()}, onGetComplete);
}
функция onGetComplete (результат) {
$('result').style.display = "блок";
$('title').innerHTML = результат[0].Title;
$('description').innerHTML = result[0].Description;
}