Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Пример реализации RSS




 

Пусть служба WeatherService (была рассмотрена ранее) несет информацию о погоде по некоторым городам, их количество конечно. Если информация о погоде какое-то время не изменялась, в RSS-документе никаких обновлений не будет, а если изменялась – будут помечены обновления. Каждый элемент в RSS помечается датой и временем изменения, поэтому, если нужно обеспечить контроль за информацией о погоде, удобно сделать это в RSS, и все клиенты будут читать RSS c информацией с пометкой, когда она поменялась. Это позволит, например, отследить тенденции, например, изменения температуры: можно собрать и визуализировать информацию, когда и насколько менялась температура.

Браузер тоже умеет интерпретировать RSS: он сразу в виде HTML показывает RSS – что поменялось на странице с предыдущего визита. Все отображается уже в удобном для человека виде (не XML. Человеку достаточно тяжело читать XML, хотя он и создавался для возможности чтения и машиной, и человеком).

Есть две основных версии RSSRSS 2.0 и Atom 1.0. Оба формата собирают обновленные новости и метаинформацию с сайтов, но за ними стояли две противоборствующие группы сторонников каждого формата. Поэтому осталось два основных стандарт: Atom 1.0, который считается более удобным для HTTP REST, и RSS 2.0 – для новостных сайтов. Отличия форматов проявляются в названиях тегов и в стандартном их наборе, но по возможностям оба формата приблизительно равны.

 

Стандартом для веб-служб REST считается возвращать данные в формате Atom 1.0. Библиотека WCF имеет средства, значительно облегчающие эту задачу.

 

public SyndicationFeedFormatter GetWeatherInfoFeed()

{

string[] locations = { "Minsk", "Vitebsk" };

//WhetherInfo res = GetWhetherInfo(location);

var feedData = new SyndicationFeed("WeatherInfo",

"Weather information for the given location",

new Uri("http://localhost/WeatherService/weather/feed"));

List<SyndicationItem> items = new List<SyndicationItem>();

foreach (string location in locations)

{

SyndicationItem item = new SyndicationItem(location,

string.Format("{0} temperature: {1}",

location, GetTemperature(location)),

new Uri("http://localhost/WeatherService/weather/get?loc="

+ location), "ItemID", DateTime.Now);

items.Add(item);

}

feedData.Items = items;

Atom10FeedFormatter feed = new Atom10FeedFormatter(feedData);

return feed;

}

 

Для создания RSS существует тип данных, который называется SyndicationFeedFormatter. Это объект для форматирования данных в формате RSS. Если метод возвращает данные в этом формате, WCF умеет использовать этот объект, чтобы вернуть не его свойства, а его содержимое, то, что он возвращает в виде потока – SyndicationFeedFormatter умеет возвращать потока и WCF об этом знает. Ситуация аналогична с примерами, где методы службы возвращали объекты типа Stream: WCF также выводила не свойства самих объектов (открыт или закрыт, позиция и другие), а их содержимое.

Как работает GetWeatherInfoFeed? Создается объект feedData класса SyndicationFeed. Для него создается список элементов класса SyndicationItem. feedData и есть источник данных для синдикации – для создания объекта RSS. В цикле создаются объекты класса SyndicationItem, накапливаются в массиве созданных объектов. Для них задаются различные свойства, одно из которых – URL для получения значений.

Мы формируем список ссылок и присваиваем его свойству Items (feedData.Items = items) класса SyndicationFeed. После этого создается Atom10FeedFormatter на базе полученного объекта SyndicationFeed. feedData – собственно данные RSS, так же, как и XML, в разобраном виде, содержат просто данные определенного формата. Это еще не XML. А вот Atom10FeedFormatter – это форматированный XML в формате Atom 1.0. Объект Atom10FeedFormatter с вложенным внутрь SyndicationFeed обрабатывается WCF. WCF вызывает сериализацию объекта в поток. Это будет XML документ, соответствующий стандарту Atom 1.0.

Чем хорош RSS? Он может содержать ссылки, которые может показывать браузер. Если этот RSS отобразить на экране, он будет отформатирован и покажет ссылки. Можно приспособить веб-службу для показа результата прямо в браузере. Рассмотрим результат вызова описанного метода (http://localhost/WeatherService/weather/feed).

 

 

Так выглядит результат при просмотре в браузере Internet Explorer. Эту страницу сформатировал сам браузер. Имена городов и зеленые стрелки работают как ссылки (пример ссылки – в нижней части рисунка). Это ссылки, указанные в SyndicationFeed. Код ответа службы представлен ниже.

 

<feed xmlns="http://www.w3.org/2005/Atom">

<title type="text">

WeatherInfo

</title>

<subtitle type="text">

Weather information for the given location

</subtitle>

<id>

uuid:b71cda32-74cb-495f-bc38-21ed9f5bb22e;id=1

</id>

<updated>

2013-12-22T16:19:57Z

</updated>

<link rel="alternate" href="http://localhost/WeatherService/weather/feed"/>

<entry>

<id>

ItemID

</id>

<title type="text">

Minsk

</title>

<updated>

2013-12-22T19:19:57+03:00

</updated>

<link rel="alternate" href="http://localhost/WeatherService/weather/get?loc=Minsk"/>

<content type="text">

Minsk temperature: 15

</content>

</entry>

<entry>

<id>

ItemID

</id>

<title type="text">

Vitebsk

</title>

<updated>

2013-12-22T19:19:57+03:00

</updated>

<link rel="alternate" href="http://localhost/WeatherService/weather/get?loc=Vitebsk"/>

<content type="text">

Vitebsk temperature: 13

</content>

</entry>

</feed>

 

Наиболее полное представление о той или иной версии RSS можно получить, изучив спецификацию.


 




Поделиться с друзьями:


Дата добавления: 2014-11-16; Просмотров: 437; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.018 сек.