Partilhar via


Arquitetura de Syndication

A API de distribuição foi projetada para fornecer um modelo de programação neutro em termos de formato que permite que o conteúdo sindicalizado seja gravado no fio em uma variedade de formatos. O modelo de dados abstrato consiste nas seguintes classes:

Essas classes são mapeadas de perto para as construções definidas na especificação Atom 1.0, embora alguns dos nomes sejam diferentes.

No Windows Communication Foundation (WCF), os feeds de distribuição são modelados como outro tipo de operação de serviço, em que o tipo de retorno é uma das classes derivadas de SyndicationFeedFormatter. A recuperação de um feed é modelada como uma troca de mensagens de solicitação-resposta. Um cliente envia uma solicitação para o serviço e o serviço responde. A mensagem de solicitação é definida em um protocolo de infraestrutura (por exemplo, HTTP bruto) e a mensagem de resposta contém uma carga que consiste em um formato de distribuição comumente entendido (RSS 2.0 ou Atom 1.0). Os serviços que implementam essas trocas de mensagens são chamados de serviços de distribuição.

O contrato para um serviço de distribuição consiste em um conjunto de operações que retorna uma instância da SyndicationFeedFormatter classe. O exemplo a seguir demonstra uma declaração de interface para um serviço de distribuição.

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

O suporte à distribuição é criado com base no Modelo de Programação REST do WCF que define a WebHttpBinding ligação, que é usada em conjunto com WebHttpBehavior para disponibilizar feeds como serviços. Para obter mais informações sobre o modelo de programação REST do WCF, consulte Visão geral do modelo de programação HTTP da Web do WCF.

Nota

A especificação Atom 1.0 permite que segundos fracionários sejam especificados em qualquer uma de suas construções de data. Ao serializar e desserializar, a implementação do WCF ignora os segundos fracionários.

Modelo de objeto

O modelo de objeto para distribuição consiste nos grupos de classes nas tabelas a seguir.

Classes de formatação:

Classe Description
Atom10FeedFormatter Uma classe que serializa uma SyndicationFeed instância para o formato Atom 1.0.
Atom10FeedFormatter<TSyndicationFeed> Uma classe que serializa SyndicationFeed classes derivadas para o formato Atom 1.0.
Atom10ItemFormatter Uma classe que serializa uma SyndicationItem instância para o formato Atom 1.0.
Atom10ItemFormatter<TSyndicationItem> Uma classe que serializa SyndicationItem classes derivadas para o formato Atom 1.0.
Rss20FeedFormatter Uma classe que serializa uma SyndicationFeed instância para o formato RSS 2.0.
Rss20FeedFormatter<TSyndicationFeed> Uma classe que serializa SyndicationFeed classes derivadas para o formato RSS 2.0.
Rss20ItemFormatter Uma classe que serializa uma SyndicationItem instância para o formato RSS 2.0.
Rss20ItemFormatter<TSyndicationItem> Uma classe que serializa SyndicationItem classes derivadas para o formato RSS 2.0.

Classes de modelo de objeto:

Classe Description
SyndicationCategory Uma classe que representa a categoria de um feed de distribuição.
SyndicationContent Uma classe base que representa o conteúdo de distribuição.
SyndicationElementExtension Uma classe que representa uma extensão de elemento de distribuição.
SyndicationElementExtensionCollection Uma coleção de SyndicationElementExtension objetos.
SyndicationFeed Uma classe que representa um objeto de feed de nível superior.
SyndicationItem Uma classe que representa um item de feed.
SyndicationLink Uma classe que representa um link dentro de um feed ou item de distribuição.
SyndicationPerson Uma classe que representa uma construção Atom Person.
SyndicationVersions Uma classe que representa as versões de protocolo de distribuição suportadas.
TextSyndicationContent Uma classe que representa qualquer SyndicationItem conteúdo a ser exibido para um usuário final.
TextSyndicationContentKind Uma enumeração que representa os diferentes tipos de conteúdo de distribuição de texto suportados.
UrlSyndicationContent Uma classe que representa o conteúdo de distribuição que consiste em uma URL para outro recurso.
XmlSyndicationContent Uma classe que representa o conteúdo de distribuição que não deve ser exibido em um navegador.

As abstrações de dados principais no modelo de objeto são Feed e Item, que correspondem às SyndicationFeed classes and SyndicationItem . Um Feed expõe alguns metadados no nível do feed (por exemplo, Título, Descrição e Autor), um local para armazenar extensões desconhecidas e um conjunto de itens que compõem o restante do conteúdo de informações do feed. Um Item disponibiliza alguns metadados no nível do item (por exemplo, Title, Summary e PublicationDate), um local para armazenar extensões desconhecidas e um elemento de conteúdo que contém o restante do conteúdo de informações do item. As abstrações principais de Feed e Item são suportadas por classes adicionais que representam construções de dados comuns referenciadas nas especificações Atom 1.0 e RSS.

As informações transportadas em uma instância de Feed podem ser convertidas em uma variedade de formatos XML. O processo de conversão de e para XML é gerenciado pela SyndicationFeedFormatter classe. Esta aula é abstrata; implementações concretas são fornecidas para Atom 1.0 e RSS 2.0, Atom10FeedFormatter e Rss20FeedFormatter. Para usar classes Feed derivadas, use uma ou Atom10FeedFormatter<TSyndicationFeed>Rss20FeedFormatter<TSyndicationFeed> como elas permitem especificar uma classe Feed derivada. Para usar classes de item derivadas, use um ou Atom10ItemFormatter<TSyndicationItem>Rss20ItemFormatter<TSyndicationItem> como eles permitem que você especifique uma classe de item derivada Terceiros podem derivar sua própria implementação de para dar suporte a diferentes formatos de SyndicationFeedFormatter distribuição.

Extensibilidade

  • Uma característica fundamental dos protocolos de distribuição é a extensibilidade. Tanto o Atom 1.0 quanto o RSS 2.0 permitem adicionar atributos e elementos a feeds de distribuição que não estão definidos nas especificações. O modelo de programação de distribuição WCF fornece duas maneiras de trabalhar com atributos e extensões personalizados: derivando uma nova classe e acesso vagamente tipado. Para obter mais informações, consulte Extensibilidade de distribuição.

Consulte também