Поделиться через


Архитектура синдикации

API синдикации предназначен для обеспечения независимой от формата модели программирования, которая позволяет передавать сводное содержимое по каналам связи в различных форматах. Абстрактная модель данных состоит из следующих классов:

Эти классы тесно сопоставлены с конструкциями, определенными в спецификации Atom 1.0, хотя некоторые имена различаются.

В Windows Communication Foundation (WCF) каналы синдикации моделиируются как другой тип операции службы, где возвращаемый тип является одним из производных классов SyndicationFeedFormatter. Извлечение веб-канала моделируется в виде обмена сообщениями «запрос-ответ». Клиент отправляет службе запрос, а служба отвечает. Сообщение с запросом задается протоколом инфраструктуры (например, чистым HTTP), а сообщение ответа содержит полезные данные в общепринятом формате синдикации (RSS 2.0 или Atom 1.0). Службы, реализующие подобные механизмы обмена сообщениями, называются службами синдикации.

Контракт службы синдикации состоит из набора операций, которые возвращают экземпляр класса SyndicationFeedFormatter. В следующем примере показано объявление интерфейса для службы синдикации.

[ServiceContract]
[ServiceKnownType(typeof(Atom10FeedFormatter))]
[ServiceKnownType(typeof(Rss20FeedFormatter))]
public interface IBlog
{
    [OperationContract]
    [WebGet(UriTemplate="GetBlog?format={format}", BodyStyle=WebMessageBodyStyle.Bare)]
    SyndicationFeedFormatter GetBlog(string format);
}

Поддержка синдикации основана на модели программирования WCF REST, которая определяет WebHttpBinding привязку, которая используется в сочетании с WebHttpBehavior тем, чтобы сделать веб-каналы доступными в качестве служб. Дополнительные сведения о модели программирования REST WCF см. в обзоре модели программирования WCF Web HTTP.

Примечание.

Спецификация Atom 1.0 позволяет указывать точность выборки в долях секунды во всех структурах даты. При сериализации и десериализации реализации WCF пропускает дробные секунды.

Модель объектов

Объектная модель синдикации состоит из групп классов в следующих таблицах.

Классы форматирования:

Класс Description
Atom10FeedFormatter Класс, который выполняет сериализацию экземпляра SyndicationFeed в формат Atom 1.0.
Atom10FeedFormatter<TSyndicationFeed> Класс, который выполняет сериализацию классов, производных от SyndicationFeed, в формат Atom 1.0.
Atom10ItemFormatter Класс, который выполняет сериализацию экземпляра SyndicationItem в формат Atom 1.0.
Atom10ItemFormatter<TSyndicationItem> Класс, который выполняет сериализацию классов, производных от SyndicationItem, в формат Atom 1.0.
Rss20FeedFormatter Класс, который выполняет сериализацию экземпляра SyndicationFeed в формат RSS 2.0.
Rss20FeedFormatter<TSyndicationFeed> Класс, который выполняет сериализацию классов, производных от SyndicationFeed, в формат RSS 2.0.
Rss20ItemFormatter Класс, который выполняет сериализацию экземпляра SyndicationItem в формат RSS 2.0.
Rss20ItemFormatter<TSyndicationItem> Класс, который выполняет сериализацию классов, производных от SyndicationItem, в формат RSS 2.0.

Классы объектной модели

Класс Description
SyndicationCategory Класс, представляющий категорию веб-канала синдикации.
SyndicationContent Базовый класс, представляющий содержимое синдикации.
SyndicationElementExtension Класс, представляющий расширение элемента синдикации.
SyndicationElementExtensionCollection Коллекция объектов SyndicationElementExtension.
SyndicationFeed Класс, представляющий объект веб-канала верхнего уровня.
SyndicationItem Класс, представляющий элемент веб-канала.
SyndicationLink Класс, представляющий ссылку в веб-канале или элементе синдикации.
SyndicationPerson Класс, представляющий конструкцию Person спецификации Atom.
SyndicationVersions Класс, представляющий поддерживаемые версии протоколов синдикации.
TextSyndicationContent Класс, представляющий любое содержимое SyndicationItem, которое требуется отобразить для конечного пользователя.
TextSyndicationContentKind Перечисление, представляющее различные типы поддерживаемого текстового содержимого синдикации.
UrlSyndicationContent Класс, представляющий содержимое синдикации, которое содержит URL-адрес другого ресурса.
XmlSyndicationContent Класс, представляющий содержимое синдикации, которое не подлежит отображению в браузере.

Базовыми абстракциями данных в объектной модели являются веб-канал и элемент, которые соответствуют классам SyndicationFeed и SyndicationItem. Веб-канал предоставляет метаданные соответствующего уровня (например, заголовок, описание и имя автора), расположение для хранения неизвестных расширений, а также набор элементов, из которых состоит остальное содержимое веб-канала. Элемент предоставляет метаданные соответствующего уровня (например, заголовок, краткое описание и дату публикации), расположение для хранения неизвестных расширений, а также блок содержимого, включающий остальное содержимое элемента. Базовые абстракции потока и элемента поддерживаются дополнительными классами, которые представляют общие структуры данных, описанные в спецификациях Atom 1.0 и RSS.

Сведения, хранящиеся в экземпляре веб-канала, можно преобразовать в различные форматы XML. Процесс преобразования в формат XML и обратно управляется классом SyndicationFeedFormatter. Это абстрактный класс; конкретные реализации для спецификаций Atom 1.0 и RSS 2.0 определяются классами Atom10FeedFormatter и Rss20FeedFormatter. Для использования производных классов веб-канала следует использовать Atom10FeedFormatter<TSyndicationFeed> или Rss20FeedFormatter<TSyndicationFeed>, поскольку они позволяют задавать производный класс веб-канала. Для использования производных классов элемента следует использовать Atom10ItemFormatter<TSyndicationItem> или Rss20ItemFormatter<TSyndicationItem>, поскольку они позволяют задавать производный класс элемента. Возможно также создание собственных производных реализаций класса SyndicationFeedFormatter, поддерживающих другие форматы синдикации.

Расширяемость

  • Ключевой особенностью протоколов синдикации является их расширяемость. Оба протокола, Atom 1.0 и RSS 2.0, позволяют добавлять в веб-каналы атрибуты и элементы, не определенные в спецификациях. Модель программирования синдикации WCF предоставляет два способа работы с пользовательскими атрибутами и расширениями: создание нового класса и свободно типизированный доступ. Дополнительные сведения см. в разделе "Расширяемость Синдикации".

См. также