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


Расширяемость синдикации

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

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

Ключевой особенностью протоколов синдикации является их расширяемость. Оба протокола, Atom 1.0 и RSS 2.0, добавляют в RSS-каналы атрибуты и элементы, не определенные в спецификациях. Модель программирования синдикации Windows Communication Foundation (WCF) предоставляет следующие способы работы с пользовательскими атрибутами и расширениями, свободно типизированным доступом и производным от нового класса.

Слабо типизированный доступ

Чтобы добавить расширения путем создания нового производного класса, требуется написать дополнительный код. Другим вариантом является слабо типизированный доступ к расширениям. Все типы, определенные в абстрактной модели данных синдикации, содержат свойства AttributeExtensions и ElementExtensions (с одним исключением - SyndicationContent имеет свойство AttributeExtensions, но не имеет свойства ElementExtensions). Эти свойства представляют собой коллекции расширений, не обрабатываемых методами TryParseAttribute и TryParseElement соответственно. Доступ к этим необработанным расширениям можно получить, вызвав метод SyndicationElementExtensionCollection.ReadElementExtensions для свойства ElementExtensions классов SyndicationFeed, SyndicationItem, SyndicationLink, SyndicationPerson и SyndicationCategory. Этот набор методов находит все расширения с указанными именем и пространством имен, индивидуально десериализует их в экземпляры TExtension и возвращает в виде коллекции объектов TExtension.

Создание нового производного класса

Новый производный класс можно создать на основе любого существующего класса абстрактной модели данных. Используйте это при реализации приложения, в котором большинство веб-каналов, с которыми вы работаете, имеют определенное расширение. В данном разделе большинство веб-каналов, с которыми работает программа, содержат расширение MyExtension. Для упрощения программирования выполните следующие шаги:

  • Создайте класс, который будет содержать данные расширения. В данном случае создайте класс с именем MyExtension.

  • Создайте класс MyExtensionItem, наследующий от класса SyndicationItem, чтобы сделать доступным для программирования свойство типа MyExtension.

  • Переопределите метод TryParseElement(XmlReader, String) класса MyExtensionItem, чтобы при считывании MyExtension присваивать значение новому экземпляру MyExtension.

  • Переопределите метод WriteElementExtensions(XmlWriter, String) класса MyExtensionItem, чтобы записывать содержимое свойства MyExtension в средство записи XML.

  • Создайте класс MyExtensionFeed, наследующий от класса SyndicationFeed.

  • Переопределите метод CreateItem() класса MyExtensionFeed, чтобы он присваивал значение MyExtensionItem, а не значение по умолчанию SyndicationItem. В классах SyndicationFeed и SyndicationItem определен ряд методов, которые могут создавать объекты SyndicationLink, SyndicationCategory и SyndicationPerson (например, CreateLink(), CreateCategory() и CreatePerson()). Любой из этих методов может быть переопределен для создания пользовательского производного класса.

См. также