Sigurd Snørteland


viu² hostet i Windows Azure

Jeg har lenge hatt planer om å konvertere silverlight mediaplayeren min, viu², over til Windows Azure, men mangel på ledig tid har stoppet meg inntill nå. Fra før har jeg hostet denne løsning hos GoDaddy.com, hvor jeg også har hatt tilgang til en MS Sql Server for lagring av data. Jeg har benyttet en webservice som  kommunikasjonspunkt mellom silverlight-klienten og databasen. Når jeg nå konverterte løsningen over til Windows Azure har jeg valgt å gå over til å benytte RIA Services som kommunikasjonspunkt og Azure Storage for lagring av data.

Det endelige resultatet kan du se her:  http://viu2.cloudapp.net

PS: Etter at Windows Azure ble en betalingstjeneste er desverre ikke denne løsningen lenger tilgjengelig online.

viu2azure_13

Arbeidet med å opprette selve Azure-solutionen i Visual Studio og å klargjøre denne for RIA Services har jeg beskrevet i en tidligere blogpost, og derfor kommer jeg ikke til å gå innpå dette nå. I stede skal jeg vise hvordan jeg har gått frem for å ta i bruk Azure Storage for lagring av data i viu²-løsningen.

  • Første steg, etter at man har en Azure-solution som er klargjort for RIA Services, er å legge til referanse til følgende to dll’er i RIA/ASP.NET Web Role-prosjektet:
    StorageClient.dll (denne filen kan lastes ned fra følgende link)
    System.Data.Services.Client
  • Neste steg blir å opprette en del klasse i RIA-prosjektet knyttet til de dataene man skal lagre i Azure Storage:

viu2azure_2

  • Den første klassen vi skal opprette er ‘TelevisionVO’ som definerer hvilke data vi ønsker å lagre i Azure Storage. Denne klassen skal benyttes for å lagre tv-streaming kanaler. Viktige momenter i denne klassen er at den arver fra ‘TableStorageEntity’, som innebærer at man må implementere parametrene ‘PartitionKey’ og ‘RowKey’. I tillegg krever RIA Services at ett eller flere parametre er merket med [Key].

viu2azure_5

  • TelevisionDB er den klassen hvor vi lagger til metoder for å hente ut legge til og hente ut data fra Azure tabellene våre. I dette tilfellet har jeg opprettet en metode for å hente en liste med objekt av typen TelevisionVO, samt en metode som tar imot et TelevisionVO-objekt og lagrer det i Azure tabellen.

viu2azure_4

  • AzureDataServiceContext-klassen knytter hele løsningen opp mot Azure Table Storage og forteller Azure at denne løsningen benytter 2 tabeller,  representert med 2 domene klasse typer (RadioVO & TelevisionVO). Denne klassen arver fra ‘TableStorageDataServiceContext’-klasse, noe som innebærer at klassen automatisk er knyttet opp mot Azure-kontoinformasjoen som vi senere sak sette i config-filene i Azure-prosjektet.

viu2azure_3

  • RiaDomainServices-klassen er en del av RIA Services og er Silverlight is kommunikasjonspunkt. Dette innebærer at vi må lage metoder her som Silverlight kan kommunisere med f.eks. når data skal hentes fra Azure Table Storage. På bildet nedenfor ser du hvordan denne klassen benytter metoder i ‘TelevisionDB’ for å fylle en liste med TelevisionVO-objekter for å returnere til Silverlight.

viu2azure_6

  • Neste steg er å logge seg opp mot Windows Azure portalen og opprette et nytt prosjekt av typen ‘Storage Account’.

viu2azure_8

  • Definer et navn og eventuelt en beskrivelse av løsningen.

viu2azure_9

  • Definer en unik url til prosjektet (SilverFeed er allerede tatt av meg). De andre parametrene kan stå uendret.

viu2azure_10

  • Nå er en ‘Azure Storage Account’ opprettet og man har fått en ‘Primary Access Key’ som skal kopiers og benyttes inne i Visual Studio Azure-prosjektet.

viu2azure_11

  • Gå tilbake til Visual Studio og Azure-prosjektet og ta opp filen ‘ServiceConfiguration.cscfg’

viu2azure_14

  • Endre taggen ‘<ConfigurationSettings>’ lik den du ser på bildet nedenfor og men bytt ut verdiene i ‘AccountName’ og ‘AccountSharedKey’ taggene til de verdiene du fikk når du opprette din ‘Azure Storage Account’ i Azure portalen.

viu2azure_12

  • Gå nå til den andre filen i Azure-prosjektet, ‘ServiceDefinition.csdef’, og endre ‘<ConfigurationSettings>’ taggen lik den du ser på bildet nedenfor:

viu2azure_7

Nå er prosjektet klargjort for hosting i Windows Azure og lagring i Azure Table Storage er opprettet. Siste steg er å velge ‘Publish’ på Azure-prosjektet i Visual Studio,   for deretter å opprette et ‘Hosted Services’ i Azure portalen og laste opp de Visual Studio genererte filene til Windows Azure (lest mer om dette i denne blogpost’en).

Her er en link til min viu² hostet i Windows Azure: http://viu2.cloudapp.net

PS: Etter at Windows Azure ble en betalingstjeneste er desverre ikke denne løsningen lenger tilgjengelig online.

Advertisements

SilverFeed + Ria Services hostet i Windows Azure

I blogposten om SilverFeed-applikasjonen min skrev jeg om at løsniner som benytter RIA Services må kjøre med ‘full trust’, noe som mange hostingprovidere ikke støtter. Windows Azure derimot gir støtte for dette og derfor har jeg valgt å konvertere/kopiere prosjektetet overt til en Windows Azure-solution.

Det endelige resultatet kan du se her:  http://silverfeed.cloudapp.net

PS: Etter at Windows Azure ble en betalingstjeneste er desverre ikke denne løsningen lenger tilgjengelig online.

  • Første steg er å opprette en ny solution av typen ‘Cloud Service’.

SilverFeedAzure1

  • Legg til en ‘ASP.NET Web Role’ og sett ett egnet navn. I dette tilfellet har jeg valgt navnet ‘RIA’.

SilverFeedAzure2

  • Kryss av for ‘Enable .NET RIA Services’

SilverFeedAzure3

  • Deretter legger du til et ‘Silverlight’-prosjekt (SilverFeed) i solution’en.
  • Kopier over/legg til alle filer fra den opprinnelige SilverFeed-solution i prosjektene RIA og SilverFeed. Den totale SilverFeedAzure-solutionen skal se ut som på bildet nedenfor:

SilverFeedAzure4

  • Neste steg er å legge til en ‘http handler’ etter den metoden som IIS7 krever. Dette gjøres i ‘ ‘system.webserver’-seksjonen i web.config’ RIA-prosjektet. Http handleren ser slik ut:

<add name=”DataService” verb=”GET,POST” path=”DataService.axd” type=”System.Web.Ria.DataServiceFactory, System.Web.Ria, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35″ />

SilverFeedAzure5

  • Neste steg er å enable RIA Services i SilverFeedAzure-prosjektet. Dette gjøres i filen ‘ServiceDefinition.csdef’-filen ved å sette ‘EnableNativeCodeExecution’ til ‘true’.

SilverFeedAzure6

  • Nå er alle Azure-tilpasninger gjort og neste steg er å publisere filene for deploy til Windows Azure. Se hvordan på bilde nedenfor:

SilverFeedAzure15

  • Resultatet er at man får opprette de 2 filene du ser nedenfor:

SilverFeedAzure11

  • Neste steg er å logge seg på Windows Azure og opprette er prosjekt av typen ‘Hosted Services’.

SilverFeedAzure7

  • Definer et navn og eventuelt en beskrivelse av løsningen.

SilverFeedAzure8

  • Definer en unik url til prosjektet (SilverFeed er allerede tatt av meg). De andre parametrene kan stå uendret.

SilverFeedAzure9

  • En Windows Azure-maskin er nå klargjort for deg. Velg knappen ‘Deploy’ for å laste opp løsningen din.

SilverFeedAzure10

  • På bildet nedenfor laster man opp de 2 filene man fikk generert etter at vi valgt ‘publiser’ i SilverFeedAzure-prosjektet. I tillegg setter man en tekst som omtaler f.eks. hva denne deployen inneholdt eller når den skjedde.

SilverFeedAzure12

  • Når filene er lastet opp får sendes man tilbake til bildet nedenfor og velger knappen ‘RUN’. Etter noen minutter er løsningen oppe å kjører og statusen settes like ‘Started’ som på bildet nedenfor:

SilverFeedAzure13

Under headingen ‘Web Site URL’ finner du link til den deployede løsningen, i dette tilfellet http://silverfeed.cloudapp.net.

PS: Etter at Windows Azure ble en betalingstjeneste er desverre ikke denne løsningen lenger tilgjengelig online.

Bildet nedenfor viser SilverFeed live, hostet i Windows Azure:

SilverFeedAzure14

Dette eksemplet viser de nødvendige stegene som må gjøres for å ta en Silveright + RIA Services applikasjon over til Windows Azure. Den viser imidlertid ikke bruken av andre nyttige funksjoner i Windows Azure som f.eks. Azure Storage og SQL Azure. Jeg har i det siste også jobbet med å konvertere viu² over til Windows Azure og i den applikasjonen benytter jeg blandt annet Azure Table Storage, så jeg skal prøve å få skrevet en blogpost om den erfaringen snart.

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

download_SilverFeedAzure


myHome

For noen måneder siden skrev en bekjent fra NNUG-miljøet her i Stavanger, Glenn F.Henriksen, om sine planer om å utvikle en home assistant (les ‘Creating my home assistant‘) for å bedre organiserer hjemmet og familiehverdagen. Etter å ha lest Glenn’s blogpost fikk jeg lyst til å prøve noe lignende og jeg er nå i gang med WPF-applikasjonen dere ser på bilde nedenfor.

myHome3

Løsning min er ikke ferdigstilt enda, men i sin nåværende form tilbyr den værmelding, kalender, oppgaveliste, nyhetsoversikt via rss og verdensklokke (med værmelding) over brukerens valgte byer.

For å slippe å sette opp en egen database vurderer jeg å benytte ulike tjenester fra Google gjennom deres ‘Google Data API’. Dette api’et gjør det mulig å kommunisere med tjenester som blant annet Google Calendar og Google Docs, og nettop disse tjenestene har jeg valgt å benytte meg av. Nedenfor ser dere ett skjermbilde fra Google Calendar i nettleseren som viser de samme 3 avtalene som også vises på myHome-dashbordet på bildet ovenfor.

myHome2

Nedenfor ser dere deler av koden for å hente ut kalender-items og hvordan jeg pakker dem som objekt av klassen ‘Calendar’ og legger dem til i en list:

myHome5

Når det gjelder oppgaver så er planen å benytte tjeneste ‘Google Task’ som finnes inne i GMail, men foreløpig finnes det ikke noen API-grensesnitt for denne tjenesten, og derfor har jeg i stede valgt å benytte meg av Google Docs for å lagre oppgaver. Under oppstart av myHome blir det oppretter (dersom det ikke finnes fra før) ett ‘Spreadsheet’ dokument kalt ‘myHome’ i Google Docs og deretter leser og skriver min løsning oppgaver til dette dokumentet.

myHome1

Nedenfor ser dere deler av koden for å hente ut spreadsheet’et ved hjelp av dokumentnavn i Google Docs. Videre må man loope alle items i spreadsheet’et for å hente ut de enkelte oppgavene.

myHome4

Som sagt så er ikke denne løsningen komplett enda og derfor kommer jeg tilbake med mer informasjon og kildekode etter hvert som jeg får på plass mer funksjonalitet.


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