Sigurd Snørteland


SilverFeed: RSS-leser ved hjelp av RIA Services

Noen av utfordringen man møter på når man utvikler med Silverlight og Flash er de begrensninger som ligger i sikkerhetsmodellen. Den gjør blant annet at det ikke er mulig å koble seg opp mot eksterne datakilder med mindre disse tjenestene finnes på samme server som Silveright-løsningen, eller at det finnes en crossdomain.xml fil på serveren til datakilden (les mer her).

For å gjøre det enklere å benytte eksterne datakilder i Silverlight har Microsoft gitt oss produktet RIA Services. Dette er en løsning som gjør det enklere å bygge Silverlight-applikasjoner med en 3-lags arkitektur med Silverlight som presentasjonslag, RIA Services som applikasjonslaget (uten sikkerhetsbegrensningene til Silverlight) som kobler seg opp mot databaser og/eller webservicer.

SilverFeed9

Når man oppretter tradisjonelle Silverlight-applikasjoner får man alltid automatisk generert ett ASP.NET-prosjekt for hosting av Silverlight-løsninger, og det er i det ASP-prosjektet man implementerer RIA Services. Kort fortalt går RIA Services ut på å opprette en ’Domain Services Class’ i ASP-prosjektet, hvor man publiserer de metoder som Silverlight trenger. Eksempler på slike metoder kan for eksempel være en som henter rss-feed’er og pakker dem som objekter i en liste og returnerer listen til Silverlight. RIA Services-løsningen sørger for metodene og eventuelle klassedefinisjonen automatisk blir kopiert som ”proxyklasser” inn i Silverlight-prosjektet. RIA Services har mange funksjoner utover det jeg har nevnt og dersom du ønsker mer informasjon om RIA Services kan jeg anbefale å begynne med Brad Abrams artikkel ‘What is .NET RIA Services’.

I dette prosjektet har jeg opprettet et Silverlight + RIA Services prosjekt som henter nettopp RSS og RDF fra ulike nettsider og publiserer dem i en drag&drop-panel i Silverlight. Nedenfor vises et bilde av Silverlight-løsningen og lenger nede i denne blogposten finnes kildekoden til prosjektet. Nedenfor går jeg gjennom veil frem til denne løsningen.

SilverFeed1

  • Det første steget er å krysse av ‘Enable .NET RIA Services’ under opprettelsen av Silverlight-prosjektet. Som man ser nedenfor har jeg valgt å navngi ASP.NET hosting-prosjekt som ‘RIA’

SilverFeed2

  • Legg til en ‘Domain Services Class’ i RIA-prosjektet.

SilverFeed8

  • Dersom du skal returnerer en liste av objekter til Silverlight bør returtypen være ‘IEnumerable<…>’

SilverFeed3

  • I dette tilfellet ønsker jeg å returnere en liste av Feed-objekter til Silverlight og derfor har jeg definert Feed-klasse på bildet nedenfor. I klassen er det viktig at ett eller flere parametre er merket med [Key]

SilverFeed4

  • Nedenfor vises ett eksempelt på hvordan RIA Services metodene kan benyttes inne i Silverlight. RIA metoden returnerer som sagt en liste av feed-objektet og den velger jeg å binde til en ‘PageCollectionView’, dvs en pagercontrol til datatabellen, og denne ‘PageCollectionView’-control’en bindes til datacontext til usercontrol’en.

SilverFeed5

  • Nedenfor vises xaml’en til rss-control’en. Både pagercontrollen og datatabellen er bindet til datacontext til usercontrol’en og dermed til ‘PageCollectionView’-control’en som ble fyllt med data fra RIA-prosjektet på forige bilde.

SilverFeed6

  • Nedenfor ser du et eksempel på hvordan en rss-control vises i Silverlight. 6 slike control’ere vises til enhver tid i en drag&drop-control fra open source-prosjektet Blacklight.

SilverFeed7

PS: For å kjøre RIA Services i IIS må applikasjonen ha rettighetene ‘full trust’. Min hosting-leverandør ‘godaddy.com’ tilbyr ikke det og derfor får jeg desverre ikke lagt ut en kjørbar demo av dette prosjektet nå. I Windows Azure kjøres alle applikasjoner med ‘full trust’ og derfor planlegge jeg å skrive en blogpost om hvordan man kan konvertere dette prosjektet og hoste det i Windows Azure.

Klikk på bildet nedenfor for å laste ned kildekoden til dette eksemplet:

download_SilverFeed