Architektur von Syndication

Die Syndication-API ist darauf ausgelegt, ein Format-neutrales Programmiermodell zu bieten, mit dem es möglich ist, Schlagzeilen in verschiedenen Formaten zu schreiben und direkt zu übertragen. Das abstrakte Datenmodell besteht aus den folgenden Klassen:

Diese Klassen sind nahezu deckungsgleich mit den in der Atom 1.0-Spezifikation definierten Konstrukten, obwohl manche der Namen anders lauten.

In Windows Communication Foundation (WCF) werden Syndikationfeeds als ein anderer Diensttyp modelliert, wobei der Rückgabetyp eine der abgeleiteten Klassen von SyndicationFeedFormatter ist. Der Abruf eines Feeds wird als Anforderung-Antwort-Nachrichtenaustausch erstellt. Ein Client sendet eine Anforderung an den Dienst, und der Dienst antwortet. Die Anforderungsnachricht wird über ein Infrastrukturprotokoll festgelegt (z. B. unformatiertes HTTP), und die Antwortnachricht enthält eine Nutzlast in Form eines üblichen Syndication-Formats (RSS 2.0 oder Atom 1.0). Dienste, die diesen Nachrichtenaustausch implementieren, werden als Syndication-Dienste bezeichnet.

Der Vertrag für einen Syndication-Dienst besteht aus einer Gruppe von Vorgängen, die eine Instanz der SyndicationFeedFormatter-Klasse zurückgibt. Im folgenden Beispiel wird eine Schnittstellendeklaration für einen Syndication-Dienst veranschaulicht.

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

Syndikationssupport baut auf dem  REST-Programmiermodell auf, das die WebHttpBinding-Bindung definiert. Diese wird zusammen mit WebHttpBehavior dazu verwendet, Feeds als Dienste verfügbar zu machen. Weitere Informationen zum WCF REST-Programmiermodell finden Sie unter WCF Web HTTP Programming Model Overview.

Hinweis

Die Atom 1.0-Spezifikation lässt zu, dass Sekundenbruchteile in beliebigen Datenkonstrukten angegeben werden. Beim Serialisieren und Deserialisieren ignoriert die WCF-Implementierung die Sekundenbruchteile.

Objektmodell

Das Objektmodell für Syndication besteht aus den in den folgenden Tabellen dargestellten Klassengruppen.

Formatierungsklassen:

Klasse Beschreibung
Atom10FeedFormatter Eine Klasse, die eine SyndicationFeed-Instanz ins Atom 1.0-Format serialisiert.
Atom10FeedFormatter<TSyndicationFeed> Eine Klasse, die abgeleitete Klassen von SyndicationFeed ins Atom 1.0-Format serialisiert.
Atom10ItemFormatter Eine Klasse, die eine SyndicationItem-Instanz ins Atom 1.0-Format serialisiert.
Atom10ItemFormatter<TSyndicationItem> Eine Klasse, die abgeleitete Klassen von SyndicationItem ins Atom 1.0-Format serialisiert.
Rss20FeedFormatter Eine Klasse, die eine SyndicationFeed-Instanz ins RSS 2.0-Format serialisiert.
Rss20FeedFormatter<TSyndicationFeed> Eine Klasse, die abgeleitete Klassen von SyndicationFeed ins RSS 2.0-Format serialisiert.
Rss20ItemFormatter Eine Klasse, die eine SyndicationItem-Instanz ins RSS 2.0-Format serialisiert.
Rss20ItemFormatter<TSyndicationItem> Eine Klasse, die abgeleitete Klassen von SyndicationItem ins RSS 2.0-Format serialisiert.

Objektmodellklassen:

Klasse Beschreibung
SyndicationCategory Eine Klasse, die die Kategorie eines Syndication-Feeds darstellt.
SyndicationContent Eine Basisklasse, die Syndication-Inhalte darstellt.
SyndicationElementExtension Eine Klasse, die eine Syndication-Elementerweiterung darstellt.
SyndicationElementExtensionCollection Eine Auflistung von SyndicationElementExtension-Objekten.
SyndicationFeed Eine Klasse, die ein Feedobjekt der obersten Ebene darstellt.
SyndicationItem Eine Klasse, die ein Feedelement darstellt.
SyndicationLink Eine Klasse, die eine Verknüpfung innerhalb eines Syndication-Feeds oder -Elements darstellt.
SyndicationPerson Eine Klasse, die ein Atom-Personenkonstrukt darstellt.
SyndicationVersions Eine Klasse, die die unterstützten Syndication-Protokollversionen darstellt.
TextSyndicationContent Eine Klasse, die jeden dem Endbenutzer anzuzeigenden SyndicationItem-Inhalt darstellt.
TextSyndicationContentKind Eine Enumeration, die die verschiedenen unterstützten Typen von Text-Syndication-Inhalten darstellt.
UrlSyndicationContent Eine Klasse, die Syndication-Inhalte darstellt, die aus der URL zu einer anderen Ressource bestehen.
XmlSyndicationContent Eine Klasse, die Syndication-Inhalte darstellt, die nicht in einem Browser angezeigt werden sollen.

Die Kerndatenabstraktionen im Objektmodell sind Feed und Element, was den Klassen SyndicationFeed und SyndicationItem entspricht. Ein Feed stellt eine Reihe von Metadaten auf Feedebene (z. B. Titel, Beschreibung und Autor), einen Speicherort für unbekannte Erweiterungen und eine Gruppe von Elementen, die aus dem restlichen Inhalt des Feeds bestehen, zur Verfügung. Ein Element macht eine Reihe von Metadaten auf Elementebene (z. B. Titel, Zusammenfassung und Veröffentlichungsdatum), einen Speicherort für unbekannte Erweiterungen und ein Inhaltselement, das aus dem restlichen Inhalt des Elements besteht, verfügbar. Die Kernabstraktionen von Feed und Element werden von zusätzlichen Klassen unterstützt, die übliche, in den Spezifikationen zu Atom 1.0 und RSS referenzierte Datenkonstrukte darstellen.

Die in einer Feed-Instanz enthaltenen Informationen können in eine Reihe von XML-Formaten konvertiert werden. Die Konvertierungsprozesse in und aus XML werden von der SyndicationFeedFormatter-Klasse verwaltet. Diese Klasse ist abstrakt. Für Atom 1.0 und RSS 2.0 sowie Atom10FeedFormatter und Rss20FeedFormatter werden konkrete Implementierungen bereitgestellt. Um abgeleitete Feedklassen einzusetzen, verwenden Sie entweder Atom10FeedFormatter<TSyndicationFeed> oder Rss20FeedFormatter<TSyndicationFeed>, da Sie damit eine abgeleitete Feedklasse angeben können. Um abgeleitete Elementklassen einzusetzen, verwenden Sie entweder Atom10ItemFormatter<TSyndicationItem> oder Rss20ItemFormatter<TSyndicationItem>, da Sie damit eine abgeleitete Feedklasse angeben können. Verwender von Drittanbietern können ihre eigene Implementierung von SyndicationFeedFormatter ableiten, um andere Syndication-Formate zu unterstützen.

Erweiterungen

  • Eine Hauptfunktion von Syndication-Protokollen ist die Erweiterbarkeit. Sowohl Atom 1.0 als auch RSS 2.0 lassen zu, dass Sie Syndication-Feeds Attribute und Elemente hinzufügen, die nicht in den Spezifikationen definiert sind. Das WCF-Programmiermodell für Syndication bietet zwei Möglichkeiten, mit benutzerdefinierten Attributen und Erweiterungen zu arbeiten: das Ableiten einer neuen Klasse und typenlosen Zugriff. Weitere Informationen finden Sie unter Syndikationserweiterbarkeit.

Siehe auch