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 Syndication-Feeds als anderer Typ von Dienstvorgängen erstellt, bei dem der Rückgabetyp einer der abgeleiteten Klassen von SyndicationFeedFormatter entspricht. 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);       
}

Syndication-Unterstützung baut auf dem WCF REST-Programmiermodell auf, das die WebHttpBinding-Bindung definiert. Diese wird zusammen mit WebHttpBehavior dazu verwendet, Feeds als Dienste verfügbar zu machen. Weitere Informationen finden Sie unter das WCF-REST-Programmiermodell finden Sie unter Überblick über WCF-Web-HTTP-Programmiermodelle.

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&#160;1.0-Format serialisiert.
Atom10ItemFormatter Eine Klasse, die eine SyndicationItem-Instanz ins Atom&#160;1.0-Format serialisiert.
Atom10ItemFormatter<TSyndicationItem> Eine Klasse, die abgeleitete Klassen von SyndicationItem ins Atom&#160;1.0-Format serialisiert.
Rss20FeedFormatter Eine Klasse, die eine SyndicationFeed-Instanz ins RSS&#160;2.0-Format serialisiert.
Rss20FeedFormatter<TSyndicationFeed> Eine Klasse, die abgeleitete Klassen von SyndicationFeed ins RSS&#160;2.0-Format serialisiert.
Rss20ItemFormatter Eine Klasse, die eine SyndicationItem-Instanz ins RSS&#160;2.0-Format serialisiert.
Rss20ItemFormatter<TSyndicationItem> Eine Klasse, die abgeleitete Klassen von SyndicationItem ins RSS&#160;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.&#160;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.&#160;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&#160;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&#160;1.0 und RSS&#160;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.

Erweiterbarkeit

  • Ein Hauptfeature von Syndication-Protokollen ist die Erweiterbarkeit. Sowohl Atom&#160;1.0 als auch RSS&#160;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 Syndication-Erweiterbarkeit.

Siehe auch

Übersicht über WCF Syndication
Wie das WCF-Syndication-Objektmodell Atom und RSS zugeordnet wird
WCF-Web-HTTP-Programmiermodell