Arquitetura de sindicalização
A API de Sindicalização foi projetada para fornecer um modelo de programação neutro em formato que permite que o conteúdo sindicalizado seja gravado na transmissão em uma variedade de formatos. O modelo de dados abstrato consiste nas seguintes classes:
Essas classes mapeiam de perto os constructos definidos na especificação Atom 1.0, embora alguns dos nomes sejam diferentes.
No Windows Communication Foundation (WCF), os feeds de sindicalização são modelados como outro tipo de operação de serviço, um 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 um conteúdo que consiste em um formato de sindicalização comumente reconhecido (RSS 2.0 ou Atom 1.0). Os serviços que implementam essas trocas de mensagens são chamados de serviços de sindicalização.
O contrato para um serviço de sindicalização consiste em um conjunto de operações que retorna uma instância da classe SyndicationFeedFormatter. O exemplo a seguir demonstra uma declaração de interface para um serviço de sindicalizaçã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 à sindicalização é criado com base no Modelo de Programação REST do WCF que define a associação WebHttpBinding, que é usada em conjunto para 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.
Observação
A especificação do Atom 1.0 permite que segundos fracionários sejam especificados em qualquer um de seus constructos de data. Ao serializar e desserializar a implementação do WCF ignora os segundos fracionários.
Modelo de Objeto
O modelo de objeto para sindicalização consiste nos grupos de classes nas tabelas a seguir.
Classes de formatação:
Classe | Descrição |
---|---|
Atom10FeedFormatter | Uma classe que serializa uma instância SyndicationFeed para o formato Atom 1.0. |
Atom10FeedFormatter<TSyndicationFeed> | Uma classe que serializa classes derivadas de SyndicationFeed para o formato Atom 1.0. |
Atom10ItemFormatter | Uma classe que serializa uma instância SyndicationItem para o formato Atom 1.0. |
Atom10ItemFormatter<TSyndicationItem> | Uma classe que serializa classes derivadas de SyndicationItem para o formato Atom 1.0. |
Rss20FeedFormatter | Uma classe que serializa uma instância SyndicationFeed para o formato RSS 2.0. |
Rss20FeedFormatter<TSyndicationFeed> | Uma classe que serializa classes derivadas de SyndicationFeed para o formato RSS 2.0. |
Rss20ItemFormatter | Uma classe que serializa uma instância SyndicationItem para o formato RSS 2.0. |
Rss20ItemFormatter<TSyndicationItem> | Uma classe que serializa classes derivadas de SyndicationItem para o formato RSS 2.0. |
Classes de modelo de objeto:
Classe | Descrição |
---|---|
SyndicationCategory | Uma classe que representa a categoria de um feed de sindicalização. |
SyndicationContent | Uma classe base que representa o conteúdo de sindicalização. |
SyndicationElementExtension | Uma classe que representa uma extensão do elemento de sindicalização. |
SyndicationElementExtensionCollection | Uma coleção de objetos SyndicationElementExtension . |
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 sindicalização. |
SyndicationPerson | Uma classe que representa um constructo Atom Person. |
SyndicationVersions | Uma classe que representa as versões de protocolo de sindicalização com suporte. |
TextSyndicationContent | Uma classe que representa qualquer conteúdo de SyndicationItem a ser exibido para um usuário final. |
TextSyndicationContentKind | Uma enumeração que representa os diferentes tipos de conteúdo de sindicalização de texto compatíveis. |
UrlSyndicationContent | Uma classe que representa o conteúdo de sindicalização composto de uma URL para outro recurso. |
XmlSyndicationContent | Uma classe que representa o conteúdo de sindicalização que não será exibido em um navegador. |
As abstrações de dados principais no modelo de objeto são Feed e Item, que correspondem às classes SyndicationFeed e 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, Título, Resumo 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 compatíveis com as classes adicionais que representam constructos de dados comuns referenciadas nas especificações do Atom 1.0 e RSS.
As informações transportadas em uma instância do Feed podem ser convertidas em uma variedade de formatos XML. O processo de conversão de e para XML é gerenciado pela classe SyndicationFeedFormatter. Essa classe é abstrata; implementações concretas são fornecidas para Atom 1.0 e RSS 2.0, Atom10FeedFormatter e Rss20FeedFormatter. Para usar classes de Feed derivadas, use Atom10FeedFormatter<TSyndicationFeed> ou Rss20FeedFormatter<TSyndicationFeed> como elas permitem que você especifique uma classe de Feed derivada. Para usar classes de item derivadas, use Atom10ItemFormatter<TSyndicationItem> ou Rss20ItemFormatter<TSyndicationItem> já que elas permitem que você especifique uma classe de item derivada Terceiros podem derivar sua própria implementação de SyndicationFeedFormatter para dar suporte a diferentes formatos de sindicalização.
Extensibilidade
- Um dos principais recursos dos protocolos de sindicalização é a extensibilidade. Atom 1.0 e RSS 2.0 permitem que você adicione atributos e elementos a feeds de sindicalização que não estão definidos nas especificações. O modelo de programação de sindicalização do WCF fornece duas maneiras de trabalhar com atributos e extensões personalizados: derivar uma nova classe e acesso vagamente tipado. Para obter mais informações, consulte Extensibilidade da sindicalização.