Архитектура синдикации
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 предоставляет два способа работы с пользовательскими атрибутами и расширениями: создание нового класса и свободно типизированный доступ. Дополнительные сведения см. в разделе "Расширяемость Синдикации".