Share via


Extensibilidad de la distribución

La API de distribución está diseñada para proporcionar un modelo de programación neutral frente al formato que permita escribir el 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.

Una característica clave de los protocolos de distribución es la extensibilidad. Atom 1.0 y RSS 2.0 agregan atributos y elementos a las fuentes de distribución que no están definidas en las especificaciones. El modelo de programación de distribución de Windows Communication Foundation (WCF) proporciona las siguientes maneras de trabajar con atributos y extensiones personalizados, el acceso escrito de forma imprecisa y derivar una nueva clase.

Access escrito de manera imprecisa

Para agregar extensiones derivando una nueva clase, es necesario escribir código adicional. Otra opción obtener acceso a extensiones de manera imprecisa. Todos los tipos definidos en el modelo de datos abstracto de distribución contienen propiedades denominadas AttributeExtensions y ElementExtensions (con una excepción, SyndicationContent tiene una propiedad AttributeExtensions pero ninguna propiedad ElementExtensions). Estas propiedades son colecciones de extensiones no procesadas por los métodos TryParseAttribute y TryParseElement, respectivamente. Puede tener acceso a estas extensiones no procesadas llamando al método System.ServiceModel.Syndication.SyndicationElementExtensionCollection.ReadElementExtensions.String,System.String) de la propiedad ElementExtensions de SyndicationFeed, SyndicationItem, SyndicationLink, SyndicationPersony SyndicationCategory. Este conjunto de métodos encuentra todas las extensiones con el nombre y espacio de nombres especificado, las deserializa individualmente en instancias de TExtension y las devuelve como una colección de objetos TExtension.

Derivación de una nueva clase

Puede derivar una nueva clase de cualquiera de las clases del modelo de datos abstracto existentes. Haga esto al implementar una aplicación en la que la mayoría de las fuentes con las que está trabajando tienen una extensión determinada. En este tema, la mayoría de las fuentes con las que el programa trabaja contienen una extensión MyExtension. Para proporcionar una experiencia de programación mejorada, realice los siguientes pasos:

  • Cree una clase para retener los datos de las extensiones. En este caso, cree una clase llamada MyExtension.
  • Derive una clase llamada MyExtensionItem desde SyndicationItem para exponer una propiedad de tipo MyExtension a efectos de la capacidad de programación.
  • Invalide TryParseElement en la clase MyExtensionItem para crear instancias de una nueva instancia de MyExtension cuando se lee una MyExtension.
  • Invalide WriteElementExtensions en la clase MyExtensionItem para escribir el contenido de la propiedad MyExtension en un sistema de escritura de XML.
  • Derive una clase llamada MyExtensionFeed desde SyndicationFeed.
  • Invalide CreateItem en la clase MyExtensionFeed para crear instancias de MyExtensionItem en lugar del SyndicationItempredeterminado. Una serie de métodos se define en SyndicationFeed y SyndicationItem que pueden crear SyndicationLink, SyndicationCategoryy objetos SyndicationPerson (por ejemplo, CreateLink, CreateCategoryy CreatePerson). Todos los cuales se puede invalidar para crear una clase derivada personalizada.

Consulte también

Conceptos

Información general de distribución de WCF
Arquitectura de distribución