Syndikeringsarkitektur
Syndikerings-API:et är utformat för att tillhandahålla en formatneutral programmeringsmodell som gör att syndikerat innehåll kan skrivas vidare till tråden i olika format. Den abstrakta datamodellen består av följande klasser:
Dessa klasser mappar nära de konstruktioner som definieras i Atom 1.0-specifikationen, även om vissa av namnen är olika.
I Windows Communication Foundation (WCF) modelleras syndikeringsfeeds som en annan typ av tjänståtgärd, en där returtypen är en av de härledda klasserna i SyndicationFeedFormatter. Hämtningen av en feed modelleras som ett utbyte av begärandesvarsmeddelanden. En klient skickar en begäran till tjänsten och tjänsten svarar. Begärandemeddelandet anges via ett infrastrukturprotokoll (till exempel rå HTTP) och svarsmeddelandet innehåller en nyttolast som består av ett vanligt tolkat syndikeringsformat (RSS 2.0 eller Atom 1.0). Tjänster som implementerar dessa meddelandeutbyten kallas syndikeringstjänster.
Kontraktet för en syndikeringstjänst består av en uppsättning åtgärder som returnerar en instans av SyndicationFeedFormatter klassen. I följande exempel visas en gränssnittsdeklaration för en syndikeringstjänst.
[ServiceContract]
[ServiceKnownType(typeof(Atom10FeedFormatter))]
[ServiceKnownType(typeof(Rss20FeedFormatter))]
public interface IBlog
{
[OperationContract]
[WebGet(UriTemplate="GetBlog?format={format}", BodyStyle=WebMessageBodyStyle.Bare)]
SyndicationFeedFormatter GetBlog(string format);
}
Stöd för syndikering bygger på WCF REST Programming Model som definierar bindningen WebHttpBinding , som används tillsammans med WebHttpBehavior för att göra feeds tillgängliga som tjänster. Mer information om WCF REST Programming Model finns i Översikt över WCF Web HTTP Programming Model.
Kommentar
Atom 1.0-specifikationen gör att bråksekunder kan anges i någon av dess datumkonstruktioner. När du serialiserar och deserialiserar WCF-implementeringen ignoreras bråksekunderna.
Objektmodell
Objektmodellen för syndikering består av grupper av klasser i följande tabeller.
Formateringsklasser:
Klass | beskrivning |
---|---|
Atom10FeedFormatter | En klass som serialiserar en SyndicationFeed instans till Atom 1.0-format. |
Atom10FeedFormatter<TSyndicationFeed> | En klass som serialiserar SyndicationFeed härledda klasser till Atom 1.0-format. |
Atom10ItemFormatter | En klass som serialiserar en SyndicationItem instans till Atom 1.0-format. |
Atom10ItemFormatter<TSyndicationItem> | En klass som serialiserar SyndicationItem härledda klasser till Atom 1.0-format. |
Rss20FeedFormatter | En klass som serialiserar en SyndicationFeed instans till RSS 2.0-format. |
Rss20FeedFormatter<TSyndicationFeed> | En klass som serialiserar SyndicationFeed härledda klasser till RSS 2.0-format. |
Rss20ItemFormatter | En klass som serialiserar en SyndicationItem instans till RSS 2.0-format. |
Rss20ItemFormatter<TSyndicationItem> | En klass som serialiserar SyndicationItem härledda klasser till RSS 2.0-format. |
Objektmodellklasser:
Klass | beskrivning |
---|---|
SyndicationCategory | En klass som representerar kategorin för en syndikeringsfeed. |
SyndicationContent | En basklass som representerar syndikeringsinnehåll. |
SyndicationElementExtension | En klass som representerar ett tillägg för syndikeringselement. |
SyndicationElementExtensionCollection | En samling SyndicationElementExtension objekt. |
SyndicationFeed | En klass som representerar ett feedobjekt på den översta nivån. |
SyndicationItem | En klass som representerar ett flödesobjekt. |
SyndicationLink | En klass som representerar en länk i ett syndikeringsflöde eller objekt. |
SyndicationPerson | En klass som representerar en Atom Person-konstruktion. |
SyndicationVersions | En klass som representerar de syndikeringsprotokollversioner som stöds. |
TextSyndicationContent | En klass som representerar allt SyndicationItem innehåll som ska visas för en slutanvändare. |
TextSyndicationContentKind | En uppräkning som representerar de olika typerna av textsyndikeringsinnehåll som stöds. |
UrlSyndicationContent | En klass som representerar syndikeringsinnehåll som består av en URL till en annan resurs. |
XmlSyndicationContent | En klass som representerar syndikeringsinnehåll som inte ska visas i en webbläsare. |
De viktigaste dataabstraktionerna i objektmodellen är Feed och Item, som motsvarar klasserna SyndicationFeed och SyndicationItem . En feed exponerar vissa metadata på flödesnivå (till exempel Rubrik, Beskrivning och Författare), en plats för att lagra okända tillägg och en uppsättning objekt som utgör resten av flödets informationsinnehåll. Ett objekt gör vissa metadata på objektnivå tillgängliga (till exempel Rubrik, Sammanfattning och PublikationDate), en plats för att lagra okända tillägg och ett innehållselement som innehåller resten av objektets informationsinnehåll. Kärnabstraktionerna av feed och objekt stöds av ytterligare klasser som representerar vanliga datakonstruktioner som refereras till i Atom 1.0- och RSS-specifikationerna.
Informationen som skickas i en feedinstans kan konverteras till en mängd olika XML-format. Processen för att konvertera till och från XML hanteras av SyndicationFeedFormatter klassen. Den här klassen är abstrakt; konkreta implementeringar tillhandahålls för Atom 1.0 och RSS 2.0 och Atom10FeedFormatterRss20FeedFormatter. Om du vill använda härledda feedklasser använder du antingen Atom10FeedFormatter<TSyndicationFeed> eller Rss20FeedFormatter<TSyndicationFeed> så att du kan ange en härledd feedklass. Om du vill använda härledda objektklasser använder du antingen Atom10ItemFormatter<TSyndicationItem> eller Rss20ItemFormatter<TSyndicationItem> så att du kan ange en härledd objektklass Tredje part kan härleda sin egen implementering av SyndicationFeedFormatter för att stödja olika syndikeringsformat.
Utökningsbarhet
- En viktig funktion i syndikeringsprotokoll är utökningsbarhet. Med både Atom 1.0 och RSS 2.0 kan du lägga till attribut och element i syndikeringsflöden som inte har definierats i specifikationerna. Programmeringsmodellen för WCF-syndikering innehåller två sätt att arbeta med anpassade attribut och tillägg: härleda en ny klass och löst typad åtkomst. Mer information finns i Syndikering Utökningsbarhet.