Arquitectura de distribución

La API de distribución está diseñada para proporcionar un modelo de programación neutral en cuanto al formato que permita escribir contenido distribuido en la conexión en una variedad de formatos. El modelo de datos abstracto está compuesto por las siguientes clases:

Estas clases asignan estrechamente a las estructuras definidas en la especificación Atom 1.0, aunque algunos de los nombres son diferentes.

En Windows Communication Foundation (WCF), las fuentes de redifusión se modelan como otro tipo de operación de servicio, en el que el tipo de valor devuelto es el de las clases derivadas de SyndicationFeedFormatter. La recuperación de una fuente se modela como un intercambio de mensajes de solicitud-respuesta. Un cliente envía una solicitud al servicio y el servicio responde. El mensaje de solicitud se establece a través de un protocolo de infraestructura (por ejemplo, HTTP sin formato) y el mensaje de respuesta contiene una carga útil que está compuesta por un formato de distribución reconocido (RSS 2.0 o Atom 1.0). Los servicios que implementan estos intercambios de mensajes se conocen como servicios de distribución.

El contrato para un servicio de distribución está compuesto por un conjunto de operaciones que devuelve una instancia de la clase SyndicationFeedFormatter. El siguiente ejemplo muestra una declaración de interfaz para un servicio de distribución.

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

La compatibilidad con la redifusión se genera sobre el modelo de programación REST WCF que define el enlace WebHttpBinding, que se usa con WebHttpBehavior para hacer que las fuentes estén disponibles como servicios. Para obtener más información sobre el modelo de programación REST WCF, consulte Información general sobre el modelo de programación HTTP web WCF.

Nota

La especificación Atom 1.0 permite especificar segundos fraccionarios en cualquiera de sus estructuras de fechas. Al serializar y deserializar, la implementación WCF ignora los segundos fraccionarios.

Modelo de objetos

El modelo de objetos para la distribución está compuesto de grupos de clases de las tablas siguientes.

Dar formato a las clases:

Clase Descripción
Atom10FeedFormatter Una clase que serializa una instancia de SyndicationFeed al formato Atom 1.0.
Atom10FeedFormatter<TSyndicationFeed> Una clase que serializa las clases derivadas de SyndicationFeed al formato Atom 1.0.
Atom10ItemFormatter Una clase que serializa una instancia de SyndicationItem al formato Atom 1.0.
Atom10ItemFormatter<TSyndicationItem> Una clase que serializa las clases derivadas de SyndicationItem al formato Atom 1.0.
Rss20FeedFormatter Una clase que serializa una instancia de SyndicationFeed al formato RSS 2.0.
Rss20FeedFormatter<TSyndicationFeed> Una clase que serializa las clases derivadas de SyndicationFeed al formato RSS 2.0.
Rss20ItemFormatter Una clase que serializa una instancia de SyndicationItem al formato RSS 2.0.
Rss20ItemFormatter<TSyndicationItem> Una clase que serializa las clases derivadas de SyndicationItem al formato RSS 2.0.

Clases de modelo de objetos:

Clase Descripción
SyndicationCategory Una clase que representa la categoría de una fuente de distribución.
SyndicationContent Una clase base que representa el contenido de distribución.
SyndicationElementExtension Una clase que representa una extensión de elemento de distribución.
SyndicationElementExtensionCollection Una colección de objetos SyndicationElementExtension.
SyndicationFeed Una clase que representa un objeto de fuente de nivel superior.
SyndicationItem Una clase que representa un elemento de fuente.
SyndicationLink Una clase que representa un vínculo dentro de una fuente o elemento de distribución.
SyndicationPerson Una clase que representa una estructura Atom Person.
SyndicationVersions Una clase que representa las versiones del protocolo de distribución admitidas.
TextSyndicationContent Una clase que representa cualquier contenido SyndicationItem que se va a mostrar a un usuario final.
TextSyndicationContentKind Una enumeración que representa los diferentes tipos de contenido de distribución de texto admitidos.
UrlSyndicationContent Una clase que representa el contenido de distribución que consta de una dirección URL para otro recurso.
XmlSyndicationContent Una clase que representa contenido de distribución que no se mostrará en un explorador.

Las abstracciones de datos básicas en el modelo de objetos son Fuente y Elemento, que corresponde a las clases SyndicationFeed y SyndicationItem. Una Fuente expone algunos metadatos de nivel de fuente (por ejemplo, Título, Descripción y Autor), una ubicación para almacenar las extensiones desconocidas y un conjunto de elementos que constituyen el resto del contenido de la información de la fuente. Un Elemento permite que algunos metadatos de nivel de elemento (por ejemplo, Título, Resumen y PublicationDate) estén disponibles, una ubicación para almacenar las extensiones desconocidas y un elemento de contenido que contiene el resto del contenido de la información del elemento. Las abstracciones básicas de Fuente y Elemento son admitidas por clases adicionales que representan las estructuras de datos a las que se hace referencia en las especificaciones de Atom 1.0 y RSS.

La información llevada en una instancia de Fuente se puede convertir en una variedad de formatos XML. La clase SyndicationFeedFormatter administra el proceso de convertir al formato XML y desde él. Esta clase es abstracta; se proporcionan implementaciones concretas para Atom 1.0 y RSS 2.0, Atom10FeedFormatter y Rss20FeedFormatter. Para utilizar las clases de Fuente derivadas, utilice Atom10FeedFormatter<TSyndicationFeed> o Rss20FeedFormatter<TSyndicationFeed> cuando le permitan especificar una clase Fuente derivada. Para utilizar las clases de elemento derivadas utilice Atom10ItemFormatter<TSyndicationItem> o Rss20ItemFormatter<TSyndicationItem> puesto que le permitan especificar una clase de elemento derivada. Los terceros pueden derivar su propia implementación de SyndicationFeedFormatter para admitir los diferentes formatos de distribución.

Extensibilidad

  • Una característica clave de los protocolos de distribución es la extensibilidad. Atom 1.0 y RSS 2.0 le permiten agregar atributos y elementos a las fuentes de distribución que no están definidas en las especificaciones. El modelo de programación de redifusión WCF proporciona dos formas de trabajar con atributos y extensiones personalizados: la derivación de una nueva clase y el acceso escrito de manera imprecisa. Para obtener más información, consulte Extensibilidad de redifusión.

Consulte también