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 sono modellati come un altro tipo di operazione del servizio, quello 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 la dichiarazione di un'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 l'associazione WebHttpBinding utilizzata insieme a WebHttpBehavior per rendere disponibili i feed come servizi. Per ulteriori informazioni su REST, il modello di programmazione di WCF, vedere Panoramica sul 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 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 |
---|---|
Classe che serializza un'istanza di SyndicationFeed in formato Atom 1.0. |
|
Classe che serializza le classi derivate da SyndicationFeed in formato Atom 1.0. |
|
Classe che serializza un'istanza di SyndicationItem in formato Atom 1.0. |
|
Classe che serializza le classi derivate da SyndicationItem in formato Atom 1.0. |
|
Classe che serializza un'istanza di SyndicationFeed in formato RSS 2.0. |
|
Classe che serializza le classi derivate da SyndicationFeed in formato RSS 2.0. |
|
Classe che serializza un'istanza di SyndicationItem in formato RSS 2.0. |
|
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. |
Classe di base che rappresenta il contenuto di diffusione. |
|
Classe che rappresenta un'estensione degli elementi di diffusione. |
|
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. |
Classe che rappresenta le versioni del protocollo di diffusione supportato. |
|
Classe che rappresenta qualsiasi contenuto SyndicationItem da visualizzare per un utente finale. |
|
Enumerazione che rappresenta i diversi tipi di contenuto di diffusione testo supportati. |
|
Classe che rappresenta il contenuto di diffusione costituito da un URL di un'altra risorsa. |
|
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 utilizzare classi Feed derivate, utilizzare Atom10FeedFormatter o Rss20FeedFormatter, poiché consentono di specificare una classe Feed derivata. Per utilizzare classi di elementi derivate, utilizzare Atom10ItemFormatter o Rss20ItemFormatter, 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.
estensibilità
- 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 utilizzo di attributi ed estensioni personalizzati: derivazione di una nuova classe e accesso non fortemente tipizzato. Per ulteriori informazioni, vedere Estendibilità della diffusione.
Vedere anche
Concetti
Panoramica sulla diffusione WCF
Modalità di mapping del modello a oggetti di diffusione WCF ad Atom e RSS