[C#] Ik wil een <link> element met de Rss20FeedFormatter!

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Mafkees
  • Registratie: Oktober 2003
  • Niet online
Hoi allemaal :)

Ik heb een probleempje... Ik bouw een WCF Web Service die een RSS 2.0 feed moet teruggeven. Als ik daar de Rss20FeedFormatter voor gebruik werkt alles eigenlijk prima, behalve het <link> element binnen <channel>. Volgens w3schools is dat element zelfs verplicht, maar ik zie niet hoe ik die kan krijgen. Als dit element niet is toegevoegd zien zowel IE als Firefox de feed niet als een geldig feed.

In code ziet het er nu ongeveer zo uit:

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class NewsService
{
    [OperationContract]
    [WebGet(UriTemplate = "/")]
    public Rss20FeedFormatter GetRSS()
    {
        // Build the items that must be placed in the feed
        List<SyndicationItem> items = new List<SyndicationItem>();
        for (int i = 0; i < 2; i++)
        {
            SyndicationItem si  = new SyndicationItem();
            si.Title            = new TextSyndicationContent("Titel voor item " + i);
            si.PublishDate      = DateTime.Now;
            si.Content          = new TextSyndicationContent("Dit is content voor <strong>item nummer " + i + "</strong>...", TextSyndicationContentKind.XHtml);

            items.Add(si);
        }

        // Save the items to a new feed
        SyndicationFeed feed = new SyndicationFeed
        {
             Title = new TextSyndicationContent("News Headlines"),
             Description = new TextSyndicationContent("De laatste headlines!"),
             Items = items
        };
        feed.Links.Add(new SyndicationLink(new Uri("http://www.channel-link.eu/")));

        // Now return the formatter so that we get some nice RSS :)
        return new Rss20FeedFormatter(feed);
    }
}


Als ik dit nu run werkt het wel, maar in plaats van <link>http://www.channel-link.eu/</link> krijg ik nu dit element:

XML:
1
<a10:link href="http://www.channe-link.eu/"/>


En a10 is een XML namespace naar de Atom namespace... Maar ik wil een RSS feed! Geen ATOM feed!


Heeft iemand een idee, of weet iemand wat ik fout doe? :D

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Ik denk dat je gewoon op je SyndicationItem ook een Link toe moet voegen aan je Links collection.

Dus op regel 17
[code=c#]
si.Links.Add(new SyndicationLink(new Uri("MyLink")));
[/code]

O ik had niet helemaal goed gelezen.

Mmm. als ik in de MSDN kijk hebben ze het een en ander door elkaar gehaald.

http://msdn.microsoft.com...cationlink.mediatype.aspx

er staat dat als het als RSS2.0 geserialised word komt er een <a10:link> uit en als het als atom1.0 geserialised word komt er een <link> uit. :? Mischien moet je even contact opnemen met Microsoft, het lijkt erop dat er mischien een bug in de documentatie zit.

Al staat er bij SyndicationLink zelf wel
SyndicationLink can be added to a SyndicationFeed or SyndicationItem. When serialized to Atom 1.0 a SyndicationLink is written out as a <link> element, with the SyndicationLink properties written out as attributes of the <link> element. When serialized to RSS 2.0, the first SyndicationLink is written out as a <link> element. Any additional links are written out as a <a10:link> elements.
dat de eerste link als <link> element word geschreven.

edit:
Je moet eens naar de SerializeExtensionsAsAtom kijken, en eventueel naar de andere constructors van Rss20FeedFormatter. Ik denk dat je probleem daar ligt.

[ Voor 125% gewijzigd door Woy op 17-02-2009 15:31 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • Mafkees
  • Registratie: Oktober 2003
  • Niet online
Woy schreef op dinsdag 17 februari 2009 @ 15:11:
Al staat er bij SyndicationLink zelf wel

[...]

dat de eerste link als <link> element word geschreven.

edit:
Je moet eens naar de SerializeExtensionsAsAtom kijken, en eventueel naar de andere constructors van Rss20FeedFormatter. Ik denk dat je probleem daar ligt.
Als ik een nieuwe Rss20FeedFormatter aanmaak met als argument mijn SyndicationFeed en de boolean false voor serializeExtensionsAsAtom, wordt er simpelweg geen link element toegevoegd. Dus:


C#:
1
return new Rss20FeedFormatter(feed, false);


Het staat er inderdaad wel dat de eerste als <link> wordt weergegeven... maar dat doettie niet :(

[ Voor 5% gewijzigd door Mafkees op 17-02-2009 15:47 ]


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Ik heb even snel met refelector in de Rss20FeedFormatter gekeken, maar wat ik zie worden links alleen geschreven als ze RelationshipType op "alternate" hebben staan of als de SerializeExtensionsAsAtom aan hebt staan.

Weet je zeker dat het in de Rss 2.0 standaard zo staat? Dan zou ik eens contact opnemen met Microsoft, want dan lijkt het me een bug.

Je zou eventueel zelf kunnen kijken om zelf een implementatie van SyndicationFeedFormatter te schrijven.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • Mafkees
  • Registratie: Oktober 2003
  • Niet online
Woy schreef op dinsdag 17 februari 2009 @ 16:01:
Ik heb even snel met refelector in de Rss20FeedFormatter gekeken, maar wat ik zie worden links alleen geschreven als ze RelationshipType op "alternate" hebben staan of als de SerializeExtensionsAsAtom aan hebt staan.

Weet je zeker dat het in de Rss 2.0 standaard zo staat? Dan zou ik eens contact opnemen met Microsoft, want dan lijkt het me een bug.

Je zou eventueel zelf kunnen kijken om zelf een implementatie van SyndicationFeedFormatter te schrijven.
Ik ben van w3schools.com uitgegaan, aangezien dat weer onderdeel uitmaak van het W3 Consortium is ga ik er vanuit dat dat klopt. Op deze link staat dat het verplicht is. Ook de officiele specificatie van Dave Winer op de website van Harvard geeft aan dat link verplicht is.

Je kent het trouwens vast wel, dat als je met IE of Firefox naar een RSS feed gaat, dat er een mooi overzicht van wordt getoond met opmaak enzo, in plaats van XML. Als ik handmatig die link later toevoeg en het bestand als XML opsla, gebeurt dat inderdaad. Haal ik dat link element er weer uit, dan krijg ik gewoon XML te zien zonder opmaak, net als dat ik nu krijg met dat a10:link element.

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Dan denk ik dat er weinig overblijft behalve contact met MS opnemen en de bug melden.

Als oplossing kun je zelf een implementatie van SyndicationFeedFormatter/IXmlSerializable maken, of nog even kijken wat het precies inhoud als je RelationshipType op "alternate" zet.

[ Voor 18% gewijzigd door Woy op 17-02-2009 16:34 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Ik ben van w3schools.com uitgegaan, aangezien dat weer onderdeel uitmaak van het W3 Consortium is ga ik er vanuit dat dat klopt.
offtopic:
w3schools maakt geen onderdeel uit van het W3C!

Intentionally left blank

Pagina: 1