Condividi tramite


Modalità di mapping del modello a oggetti di diffusione WCF ad Atom e RSS

Quando si sviluppa un servizio di diffusione Windows Communication Foundation (WCF), vengono creati feed ed elementi utilizzando le classi seguenti:

Un SyndicationFeed può essere serializzato in qualsiasi formato di diffusione per il quale è definito un formattatore. WCF ha in dotazione due formattatori: Atom10FeedFormatter e Rss20FeedFormatter.

Il modello a oggetti basato su SyndicationFeed e SyndicationItem è più strettamente conforme alla specifica Atom 1.0 che non alla specifica RSS 2.0. Ciò è dovuto al fatto che Atom 1.0 è una specifica più sostanziale e definisce elementi ambigui o che sono stati omessi dalla specifica RSS 2.0. Di conseguenza, numerosi elementi nel modello a oggetti di diffusione di WCF non hanno rappresentazione diretta nella specifica RSS 2.0. Quando si serializzano oggetti SyndicationFeed e SyndicationItem in RSS 2.0, WCF consente di serializzare gli elementi di dati specifici di Atom come elementi di estensione qualificati con lo spazio dei nomi conformi alla specifica Atom. Questa procedura può essere controllata con un parametro passato al costruttore Rss20FeedFormatter.

Negli esempi di codice inclusi in questo argomento, per eseguire la serializzazione effettiva viene utilizzato uno dei due metodi illustrati qui.

SerializeFeed serializza un feed di diffusione.

SerializeItem serializza un elemento di diffusione.

SyndicationFeed

Nell'esempio di codice seguente viene illustrato come serializzare la classe SyndicationFeed in Atom 1.0 e RSS 2.0.

Nel codice XML seguente viene mostrato come serializzare SyndicationFeed per il formato Atom 1.0.

<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="EN-US" xmlns="http://www.w3.org/2005/Atom">
  <title type="text">My Feed Title</title>
  <subtitle type="text">My Feed Description</subtitle>
  <id>FeedID</id>
  <rights type="text">Copyright 2007</rights>
  <updated>2007-08-29T13:57:17-07:00</updated>
  <category term="categoryName" label="categoryLabel" scheme="categoryScheme" />
  <logo>https://server/image.jpg</logo>
  <generator>Sample Code</generator>
  <link rel="alternate" href="http://myfeeduri/" />
  <entry>
    <id>ItemID</id>
    <title type="text">Item Title</title>
    <summary type="text">Item Summary</summary>
    <published>2007-08-29T00:00:00-07:00</published>
    <updated>2007-08-29T13:57:17-07:00</updated>
    <author>
      <name>Jesper Aaberg</name>
      <uri>http://Jesper/Aaberg</uri>
      <email>Jesper@Aaberg.com</email>
    </author>
    <contributor>
      <name>Lene Aaling</name>
      <uri>http://Lene/Aaling</uri>
      <email>Lene@Aaling.com</email>
    </contributor>
    <link rel="alternate" href="http://myitemuri/" />
    <category term="categoryName" label="categoryLabel" scheme="categoryScheme" />
    <content type="text">Item Content</content>
    <rights type="text">Copyright 2007</rights>
    <source>
      <title type="text">My Feed Title</title>
      <subtitle type="text">My Feed Description</subtitle>
      <id>FeedID</id>
      <rights type="text">Copyright 2007</rights>
      <updated>2007-08-29T13:57:17-07:00</updated>
      <category term="categoryName" label="categoryLabel" scheme="categoryScheme" />
      <logo>https://server/image.jpg</logo>
      <generator>Sample Code</generator>
      <link rel="alternate" href="http://myfeeduri/" />
    </source>
  </entry>
</feed>

Nel codice XML seguente viene mostrato come serializzare SyndicationFeed per il formato RSS 2.0.

<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:a10="http://www.w3.org/2005/Atom" version="2.0">
  <channel>
    <title>My Feed Title</title>
    <link>http://myfeeduri/</link>
    <description>My Feed Description</description>
    <language>EN-US</language>
    <copyright>Copyright 2007</copyright>
    <lastBuildDate>Wed, 29 Aug 2007 13:57:17 -0700</lastBuildDate>
    <category domain="categoryScheme">categoryName</category>
    <generator>Sample Code</generator>
    <image>
      <url>https://server/image.jpg</url>
      <title>My Feed Title</title>
      <link>http://myfeeduri/</link>
    </image>
    <a10:id>FeedID</a10:id>
    <item>
      <guid isPermaLink="false">ItemID</guid>
      <link>http://myitemuri/</link>
      <author>Jesper@Aaberg.com</author>
      <category domain="categoryScheme">categoryName</category>
      <title>Item Title</title>
      <description>Item Summary</description>
      <source>My Feed Title</source>
      <pubDate>Wed, 29 Aug 2007 00:00:00 -0700</pubDate>
      <a10:updated>2007-08-29T13:57:17-07:00</a10:updated>
      <a10:rights type="text">Copyright 2007</a10:rights>
      <a10:content type="text">Item Content</a10:content>
      <a10:contributor>
        <a10:name>Lene Aaling</a10:name>
        <a10:uri>http://Lene/Aaling</a10:uri>
        <a10:email>Lene@Aaling.com</a10:email>
      </a10:contributor>
    </item>
  </channel>
</rss>

SyndicationItem

Nell'esempio di codice seguente viene illustrato come serializzare la classe SyndicationItem per i formati Atom 1.0 e RSS 2.0.

Nel codice XML seguente viene mostrato come serializzare SyndicationItem per il formato Atom 1.0.

<entry xmlns="http://www.w3.org/2005/Atom">
  <id>ItemID</id>
  <title type="text">Item Title</title>
  <summary type="text">Item Summary</summary>
  <published>2007-08-29T00:00:00-07:00</published>
  <updated>2007-08-29T14:07:09-07:00</updated>
  <author>
    <name>Jesper Aaberg</name>
    <uri>http://Contoso/Aaberg</uri>
    <email>Jesper.Aaberg@contoso.com</email>
  </author>
  <author>
    <name>Syed Abbas</name>
    <uri>http://Contoso/Abbas</uri>
    <email>Syed.Abbas@contoso.com</email>
  </author>
  <contributor>
    <name>Lene Aaling</name>
    <uri>http://Contoso/Aaling</uri>
    <email>Lene.Aaling@contoso.com</email>
  </contributor>
  <contributor>
    <name>Kim Abercrombie</name>
    <uri>http://Contoso/Abercrombie</uri>
    <email>Kim.Abercrombie@contoso.com</email>
  </contributor>
  <link rel="alternate" href="http://myitemuri/" />
  <category term="categoryName" label="categoryLabel" scheme="categoryScheme" />
  <category term="categoryName" label="categoryLabel" scheme="categoryScheme" />
  <content type="text">Item Content</content>
  <rights type="text">Copyright 2007</rights>
  <source>
    <title type="text">My Feed Title</title>
    <subtitle type="text">My Feed Description</subtitle>
    <link rel="alternate" href="http://myfeeduri/" />
  </source>
</entry>

Nel codice XML seguente viene mostrato come serializzare SyndicationItem per il formato RSS 2.0.

<item>
  <guid isPermaLink="false">ItemID</guid>
  <link>http://myitemuri/</link>
  <author xmlns="http://www.w3.org/2005/Atom">
    <name>Jesper Aaberg</name>
    <uri>http://Jesper/Aaberg</uri>
    <email>Jesper@Aaberg.com</email>
  </author>
  <author xmlns="http://www.w3.org/2005/Atom">
    <name>Syed Abbas</name>
    <uri>http://Contoso/Abbas</uri>
    <email>Syed.Abbas@contoso.com</email>
  </author>
  <category domain="categoryScheme">categoryName</category>
  <category domain="categoryScheme">categoryName</category>
  <title>Item Title</title>
  <description>Item Summary</description>
  <source>My Feed Title</source>
  <pubDate>Wed, 29 Aug 2007 00:00:00 -0700</pubDate>
  <updated xmlns="http://www.w3.org/2005/Atom">2007-08-29T14:07:09-07:00</updated>
  <rights type="text" xmlns="http://www.w3.org/2005/Atom">Copyright 2007</rights>
  <content type="text" xmlns="http://www.w3.org/2005/Atom">Item Content</content>
  <contributor xmlns="http://www.w3.org/2005/Atom">
    <name>Lene Aaling</name>
    <uri>http://Contoso/Aaling</uri>
    <email>Lene.Aaling@contoso.com</email>
  </contributor>
  <contributor xmlns="http://www.w3.org/2005/Atom">
    <name>Kim Abercrombie</name>
    <uri>http://Contoso/Abercrombie</uri>
    <email>Kim.Abercrombie@contoso.com</email>
  </contributor>
</item>

SyndicationPerson

Nell'esempio di codice seguente viene illustrato come serializzare la classe SyndicationPerson per i formati Atom 1.0 e RSS 2.0.

Nel codice XML seguente viene mostrato come serializzare SyndicationPerson per il formato Atom 1.0.

  <author>
    <name>Jesper Aaberg</name>
    <uri>http://Contoso/Aaberg</uri>
    <email>Jesper.Aaberg@contoso.com</email>
  </author>
<contributor>
    <name>Lene Aaling</name>
    <uri>http://Contoso/Aaling</uri>
    <email>Lene.Aaling@contoso.com</email>
  </contributor>

Nell'XML seguente viene illustrato come serializzare la classe SyndicationPerson per il formato RSS 2.0 se esiste un solo SyndicationPerson rispettivamente negli insiemi Authors o Contributors.

<author>Jesper.Aaberg@contoso.com</author>
<a10:contributor>
    <a10:name>Lene Aaling</a10:name>
    <a10:uri>http://Contoso/Aaling</a10:uri>
    <a10:email>Lene.Aaling@contoso.com</a10:email>
</a10:contributor>

Nell'XML seguente viene illustrato come serializzare la classe SyndicationPerson per il formato RSS 2.0 se esiste più di un SyndicationPerson rispettivamente negli insiemi Authors o Contributors.

<a10:author>
    <a10:name>Jesper Aaberg</a10:name>
    <a10:uri>http://Contoso/Aaberg</a10:uri>
    <a10:email>Jesper.Aaberg@contoso.com</a10:email>
</a10:author>
<a10:author>
    <a10:name>Syed Abbas</a10:name>
    <a10:uri>http://Contoso/Abbas</a10:uri>
    <a10:email>Syed.Abbas@contoso.com</a10:email>
</a10:author>
<a10:contributor>
    <a10:name>Lene Aaling</a10:name>
    <a10:uri>http://Contoso/Aaling</a10:uri>
    <a10:email>Lene.Aaling@contoso.com</a10:email>
</a10:contributor>
<a10:contributor>
    <a10:name>Kim Abercrombie</a10:name>
    <a10:uri>http://Contoso/Abercrombie</a10:uri>
    <a10:email>Kim.Abercrombie@contoso.com</a10:email>
</a10:contributor>

Nell'esempio di codice seguente viene illustrato come serializzare la classe SyndicationLink per i formati Atom 1.0 e RSS 2.0.

Nel codice XML seguente viene mostrato come serializzare SyndicationLink per il formato Atom 1.0.

<link rel="alternate" type="text/html" title="My Link Title" length="2048" href="http://contoso/MyLink" />

Nel codice XML seguente viene mostrato come serializzare SyndicationLink per il formato RSS 2.0.

<a10:link rel="alternate" type="text/html" title="My Link Title" length="2048" href="http://contoso/MyLink" />

SyndicationCategory

Nell'esempio di codice seguente viene illustrato come serializzare la classe SyndicationCategory per i formati Atom 1.0 e RSS 2.0.

Nel codice XML seguente viene mostrato come serializzare SyndicationCategory per il formato Atom 1.0.

<category term="categoryName" label="categoryLabel" scheme="categoryScheme" />

Nel codice XML seguente viene mostrato come serializzare SyndicationCategory per il formato RSS 2.0.

<category domain="categoryScheme">categoryName</category>

TextSyndicationContent

Nell'esempio di codice seguente viene illustrato come serializzare la classe TextSyndicationContent per i formati Atom 1.0 e RSS 2.0 quando viene creato TextSyndicationContent con contenuto HTML.

Nel codice XML seguente viene illustrato come serializzare la classe TextSyndicationContent con contenuto HTML per il formato Atom 1.0.

<content type="html">&lt;html&gt; some html &lt;/html&gt;</content>

Nel codice XML seguente viene illustrato come serializzare la classe TextSyndicationContent con contenuto HTML per il formato RSS 2.0.

<description>&lt;html&gt; some html &lt;/html&gt;</description>

Nell'esempio di codice seguente viene illustrato come serializzare la classe TextSyndicationContent per i formati Atom 1.0 e RSS 2.0 quando viene creato TextSyndicationContent con contenuto di testo normale.

Nel codice XML seguente viene illustrato come serializzare la classe TextSyndicationContent con contenuto di testo normale per il formato Atom 1.0.

<content type="text">Some Plain Text</content>

Nel codice XML seguente viene illustrato come serializzare la classe TextSyndicationContent con contenuto di testo normale per il formato RSS 2.0.

<description>Some Plain Text</description>

Nell'esempio di codice seguente viene illustrato come serializzare la classe TextSyndicationContent per i formati Atom 1.0 e RSS 2.0 quando viene creato TextSyndicationContent con contenuto XHTML.

Nel codice XML seguente viene illustrato come serializzare la classe TextSyndicationContent con contenuto XHTML per il formato Atom 1.0.

<content type="xhtml">

<html> some xhtml </html>

</content>

Nel codice XML seguente viene illustrato come serializzare la classe TextSyndicationContent con contenuto XHTML per il formato RSS 2.0.

<description>&lt;html&gt; some xhtml &lt;/html&gt;</description>

UrlSyndicationContent

Nell'esempio di codice seguente viene illustrato come serializzare la classe UrlSyndicationContent per i formati Atom 1.0 e RSS 2.0.

Nel codice XML seguente viene illustrato come serializzare la classe UrlSyndicationContent per il formato Atom 1.0.

<content type="audio" src="http://someurl/" />

Nel codice XML seguente viene illustrato come serializzare la classe UrlSyndicationContent con contenuto XHTML per il formato RSS 2.0.

<description />

<content type="audio" src="http://Contoso/someurl/" xmlns="http://www.w3.org/2005/Atom" />

XmlSyndicationContent

Nell'esempio di codice seguente viene illustrato come serializzare la classe XmlSyndicationContent per i formati Atom 1.0 e RSS 2.0.

Nel codice XML seguente viene illustrato come serializzare la classe XmlSyndicationContent per il formato Atom 1.0.

<content type="mytype">

<SomeData xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/FeedMapping" />

</content>

Nel codice XML seguente viene illustrato come serializzare la classe XmlSyndicationContent con contenuto XHTML per il formato RSS 2.0.

<content type="mytype" xmlns="http://www.w3.org/2005/Atom">

<SomeData xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/FeedMapping" />

</content>

Vedere anche

Attività

Procedura: creare un feed RSS di base
Procedura: creare un feed Atom di base
Procedura: esporre un feed come Atom e RSS

Concetti

Panoramica sulla diffusione WCF
Architettura di diffusione