КАТЕГОРИИ: Архитектура-(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, хотя он и создавался для возможности чтения и машиной, и человеком). Есть две основных версии RSS – RSS 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; Просмотров: 459; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |