Architettura di diffusione

L'API di diffusione è progettata per fornire un modello di programmazione indipendente dal formato, che consente di scrivere in rete contenuto diffuso in molteplici formati. Il modello di dati astratto è costituito dalle classi seguenti:

Queste classi eseguono il mapping in modo rigoroso ai costrutti definiti nella specifica Atom 1.0, anche se alcuni dei nomi sono diversi.

In Windows Communication Foundation (WCF), i feed di diffusione vengono modellati come un altro tipo di operazione del servizio, uno in cui il tipo restituito è una delle classi derivate di SyndicationFeedFormatter. Il recupero di un feed è modellato come uno scambio di messaggi richiesta-risposta. Un client invia una richiesta al servizio e il servizio risponde. Il messaggio di richiesta viene impostato in un protocollo dell'infrastruttura, ad esempio il protocollo HTTP non elaborato, e il messaggio di risposta contiene un payload costituito da un formato di diffusione noto (RSS 2.0 o Atom 1.0). I servizi che implementano questi scambi di messaggi sono denominati servizi di diffusione.

Il contratto di un servizio di diffusione è costituito da un set di operazioni che restituisce un'istanza della classe SyndicationFeedFormatter. Nell'esempio seguente viene illustrata una dichiarazione di interfaccia per un servizio di diffusione.

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

Il supporto della diffusione è basato sul modello di programmazione REST di WCF che definisce il binding WebHttpBinding, usato insieme a WebHttpBehavior per rendere disponibili i feed come servizi. Per altre informazioni sul modello di programmazione REST WCF, vedere Panoramica del modello di programmazione HTTP WEB WCF.

Nota

La specifica Atom 1.0 consente di specificare secondi frazionari in uno qualsiasi dei costrutti data. I secondi frazionari verranno ignorati dall'implementazione di WCF durante la fase di serializzazione e deserializzazione.

Modello a oggetti

Il modello a oggetti per la diffusione è costituito dai gruppi di classi riportati nelle tabelle seguenti.

Classi di formattazione:

Classe Descrizione
Atom10FeedFormatter Classe che serializza un'istanza di SyndicationFeed in formato Atom 1.0.
Atom10FeedFormatter<TSyndicationFeed> Classe che serializza le classi derivate da SyndicationFeed in formato Atom 1.0.
Atom10ItemFormatter Classe che serializza un'istanza di SyndicationItem in formato Atom 1.0.
Atom10ItemFormatter<TSyndicationItem> Classe che serializza le classi derivate da SyndicationItem in formato Atom 1.0.
Rss20FeedFormatter Classe che serializza un'istanza di SyndicationFeed in formato RSS 2.0.
Rss20FeedFormatter<TSyndicationFeed> Classe che serializza le classi derivate da SyndicationFeed in formato RSS 2.0.
Rss20ItemFormatter Classe che serializza un'istanza di SyndicationItem in formato RSS 2.0.
Rss20ItemFormatter<TSyndicationItem> Classe che serializza le classi derivate da SyndicationItem in formato RSS 2.0.

Classi del modello a oggetti:

Classe Descrizione
SyndicationCategory Classe che rappresenta la categoria di un feed di diffusione.
SyndicationContent Classe di base che rappresenta il contenuto di diffusione.
SyndicationElementExtension Classe che rappresenta un'estensione degli elementi di diffusione.
SyndicationElementExtensionCollection Una raccolta di oggetti SyndicationElementExtension.
SyndicationFeed Classe che rappresenta un oggetto feed di livello superiore.
SyndicationItem Classe che rappresenta un elemento del feed.
SyndicationLink Classe che rappresenta un collegamento all'interno di un feed di diffusione o di un elemento del feed.
SyndicationPerson Classe che rappresenta un costrutto Person di Atom.
SyndicationVersions Classe che rappresenta le versioni del protocollo di diffusione supportato.
TextSyndicationContent Classe che rappresenta qualsiasi contenuto SyndicationItem da visualizzare per un utente finale.
TextSyndicationContentKind Enumerazione che rappresenta i diversi tipi di contenuto di diffusione testo supportati.
UrlSyndicationContent Classe che rappresenta il contenuto di diffusione costituito da un URL di un'altra risorsa.
XmlSyndicationContent Classe che rappresenta il contenuto di diffusione non destinato alla visualizzazione in un browser.

Le astrazioni dati di base nel modello a oggetti sono Feed e Item, che corrispondono alle classi SyndicationFeed e SyndicationItem. Un Feed espone alcuni metadati di livello feed, ad esempio Title, Description e Author, un percorso per la memorizzazione di estensioni sconosciute e un set di elementi che costituiscono il resto del contenuto di informazioni del feed. Un Item rende disponibili alcuni metadati di livello elemento, ad esempio, Title, Summary e PublicationDate, un percorso per archiviare estensioni sconosciute e un elemento contenuto che include il resto del contenuto di informazioni dell'elemento. Le astrazioni di base di Feed e Item sono supportate da ulteriori classi che rappresentano costrutti dati comuni a cui si fa riferimento nelle specifiche Atom 1.0 e RSS.

Le informazioni veicolate in un'istanza di Feed possono essere convertite in una varietà di formati XML. Il processo di conversione da e verso XML viene gestito dalla classe SyndicationFeedFormatter. Questa classe è astratta; ne vengono fornite implementazioni concrete Atom10FeedFormatter e Rss20FeedFormatter per Atom 1.0 e RSS 2.0. Per usare classi Feed derivate, usare Atom10FeedFormatter<TSyndicationFeed> o Rss20FeedFormatter<TSyndicationFeed>, poiché consentono di specificare una classe Feed derivata. Per usare classi di elementi derivate, usare Atom10ItemFormatter<TSyndicationItem> o Rss20ItemFormatter<TSyndicationItem>, poiché consentono di specificare una classe di elementi derivata. Le terze parti possono derivare la propria implementazione di SyndicationFeedFormatter per supportare formati di diffusione diversi.

Estendibilità

  • Una funzionalità chiave dei protocolli di diffusione è l'estensibilità. Sia Atom 1.0 che RSS 2.0 consentono di aggiungere ai feed di diffusione attributi ed elementi che non sono definiti nelle specifiche. Il modello di programmazione della diffusione WCF prevede due modalità di uso di attributi ed estensioni personalizzati: derivazione di una nuova classe e accesso non fortemente tipizzato. Per altre informazioni, vedere Estendibilità della diffusione.

Vedi anche