Silverlight's Isolated Storage: de theorie

Door AtleX op zaterdag 16 augustus 2008 15:02 - Reacties (9)
CategorieŽn: HowTo, Silverlight, Views: 6.747

Silverlight, Microsoft's platform voor RIA's, kent een leuk mechanisme om bestanden (tijdelijk) op te slaan op de computer van de client. Deze techniek, Isolated Storage genaamd, werkt buiten de browser-cache om en is dus zelfs cross-browser te gebruiken. In deze blogpost behandel ik de theorie achter deze techniek, zoals Isolated Storage in Silverlight 2b2 werkt.

Websites zijn normaal gesproken beperkt tot hun eigen sandbox. Daardoor heeft bijvoorbeeld Javascript geen toegang tot je harde schijf en kan Flash niet al je cookies jatten. Ook is het door het sandbox-model voor RIA's en websites normaal gesproken niet mogelijk om data op de client op te slaan, en moet ook tijdelijke data op de server worden opgeslagen. Naast het feit dat dit nutteloos ruimte inneemt op de server en je zinloos dataverkeer hebt is een netwerkverbinding over het algemeen ook nog eens trager.

Isolated Storage, kortweg IsoStorage, bied hiervoor een oplossing. Elke applicatie krijgt een quotum van 1MB op de clientcomputer, wat benaderbaar is als een normaal filesystem. Je kan er directories en files in aanmaken, wijzigen en verwijderen waarbij er geen beperkingen op aantal of grootte zijn, mits je natuurlijk niet over je quotum heen komt. Deze data is sandboxed, al kan je ervoor kiezen of je data alleen voor de applicatie of voor alle applicaties op het domein beschikbaar zijn. Files en directories buiten de IsoStorage zijn niet te benaderen, waardoor de veiligheid van de client in principe gewaarborgd blijft.

Het quotum van 1MB is voor de meeste applicaties genoeg, maar voor de gevallen waarbij het niet voldoet is het mogelijk deze op te hogen tot een maximum van 819.2 PB. Dat is een totaal van 858993459 gigabyte, wat de komende jaren nog wel voldoet. :) Het verhogen van de limiet kan niet zomaar, de gebruiker moet hier toestemming voor geven (en kan het dus weigeren):
http://tweakers.net/ext/f/znywNaywlsHFFajlES9tm8CP/thumb.png
Daarnaast kan het verhogen alleen na een actie van de gebruiker, bijvoorbeeld een klik op een knop. Het verhogen in bijvoorbeeld de eventhandler van het Loaded event gaat dus niet. Ook moet de aanroep vanuit de UI-thread gebeuren. Als aan deze voorwaarden niet is voldaan krijgt de gebruiker geen confirmation dialog te zien, maar is de return value van IncreaseQuotaTo() FALSE.

Het is trouwens niet mogelijk om de store weer te verkleinen. Een eenmaal opgehoogd quotum kan niet meer verkleind worden, indien IncreaseQuotaTo() gebruikt wordt met een lager aantal bytes dan het huidige quotum resulteert dit onherroepelijk in een ArgumentException. Ook kan de gebruiker via de Silverlight configuration een store van 1 of alle applicaties verwijderen, je kan er dus niet vanuit gaan dat een terugkerende visitor nog beschikt over zijn data.
http://tweakers.net/ext/f/Nzu2p3vDuHbJ8r2JHMkD5lWr/thumb.png
Bij het opnieuw inladen of opslaan van data in hetzelfde bestand is het dus altijd noodzakelijk om het bestaan van de file te controleren, anders kunnen er nogal vervelende exceptions optreden. Houd er daarbij ook rekening mee dat de gebruiker altijd de IsoStore kan verwijderen, dus ook tijdens de lifetime van de sessie. Data die bij het starten van de applicatie beschikbaar was hoeft dat 5 minuten later bij het afsluiten niet meer te zijn.

Naast het opslaan van data is het ook mogelijk om instellingen op te slaan, dit werkt aan de hand van key=>value paren waarbij de key een string is en de value een object. Hierdoor is het in principe mogelijk om alles als instelling op te slaan, al is dat natuurlijk niet de bedoeling. Ook hier geld weer dat instellingen binnen de application- of domain-scope kunnen worden opgeslagen.

Het verwijderen van de IsoStore door middel van de Silverlight configuration verwijdert trouwens ook de instellingen. Controleer bij het opslaan en lezen van instellingen dus altijd eerst op het bestaan ervan. Daarnaast is er geen Update method in de IsolatedStorageSettings class, dus het updaten van een instelling vereist eerst het verwijderen door middel van Remove() voordat met Add() de setting opnieuw toegevoegd kan worden met de nieuwe waarde.

Al met al bied IsoStorage veel mogelijkheden voor de programmeur om de hoeveelheid dataverkeer te verminderen en om instellingen en tijdelijke bestanden te persisten op de client. Doordat het mogelijk is om deze data te delen met andere applicaties binnen hetzelfde domein kunnen meerdere Silverlight applicaties van bijvoorbeeld dezelfde instellingen gebruik maken, waardoor deze niet nodeloos meerdere malen van de server opgehaald hoeven te worden. In deel 2 zal ik een aantal voorbeelden geven hoe IsoStorage gebruikt kan worden.

Volgende: Backups! Backups! Backups! 09-'08 Backups! Backups! Backups!
Volgende: Usability - Niet alleen voor websites 08-'08 Usability - Niet alleen voor websites

Reacties


Door Tweakers user Sebazzz, zaterdag 16 augustus 2008 15:25

Klinkt gaaf. Waar ik niet blij mee ben is dat de data niet automatisch verwijderd wordt nadat de applicatie ontladen is, of na een bepaalde tijd.

En silverlight is zowieso gaaf want je kan .NET en C# en WPF gebruiken dus bijna geen haar verschil tegenover desktop developing. :p

Door Tweakers user AtleX, zaterdag 16 augustus 2008 15:32

Klinkt gaaf. Waar ik niet blij mee ben is dat de data niet automatisch verwijderd wordt nadat de applicatie ontladen is, of na een bepaalde tijd.
Indien de data verwijdert wordt als de applicatie gesloten wordt heeft IsoStorage geen nut, de meeste dingen houd je dan in-memory en je moet alsnog een hoop data gaan persisten op de server. Na een bepaalde tijd de data automatisch verwijderen is aardig, maar wat als ik bijvoorbeeld een Silverlight-based webclient gebruik die een draft-versie van een email in de IsoStore opslaat, wat na bijvoorbeeld een week wordt verwijderd? Dan ben ik mijn draft kwijt.

Nu ligt er gewoon een grotere verantwoordelijkheid bij de programmeur, die moet z'n rommel netjes opruimen als de data geen nut meer heeft. Daarnaast heeft de gebruiker ten allen tijde de mogelijkheid om de gegevens te verwijderen.
En silverlight is zowieso gaaf want je kan .NET en C# en WPF gebruiken dus bijna geen haar verschil tegenover desktop developing. :p
Silverlight is inderdaad best gaaf, maar ik ben het niet met je eens als je zegt dat er bijna geen verschil meer is. Zo heb je niet heel WPF maar een subset ervan beschikbaar, en je kan ook niet het complete .NET framework gebruiken.

Door Tweakers user LinuX-TUX, zondag 17 augustus 2008 16:50

Ik vind het een hele leuke gave vooruitstrevende techniek ... maar als ze webland willen overleven, moeten ze toch iets verzinnen om het multiplatform te gaan maken.

Tot die tijd heb ik er geen reet aan ... sorry

edit:

Nog een keer gekeken of ze er al wat aan hebben gedaan, op de hoofdsite staat
Microsoft Silverlight is a cross-browser, cross-platform, and cross-device plug-in for delivering the next generation of .NET based media experiences and rich interactive applications for the Web.

By using Expression Studio and Visual Studio, designers and developers can collaborate more effectively using the skills they have today to light up the Web of tomorrow.
En als ik voor de plugin ga dan is het
Microsoft Silverlight may not be supported on your computer's hardware or operating system.
Ubuntu 64Bit - FireFox3

Ik blijf het overigens wel volgen, het is immers WEL interessant :Y)

Door Tweakers user AtleX, zondag 17 augustus 2008 17:09

Op dit moment zijn er plugins voor Mac en Windows, Linux development gebeurt vanuit het Mono project en heet dan Moonlight. In hoeverre dat al bruikbaar is weet ik niet.

Door Tweakers user LinuX-TUX, zondag 17 augustus 2008 22:53

Op dit moment zijn er plugins voor Mac en Windows, Linux development gebeurt vanuit het Mono project en heet dan Moonlight. In hoeverre dat al bruikbaar is weet ik niet.
Thanks voor de info, staat gebookmarked.

Hoop dat het niet een slap 'niet officieel erkent/ondersteund' aftreksel wordt van SilverLight (Microsoft) zelf :Y)

Door Tweakers user PcDealer, maandag 18 augustus 2008 01:33

Hoop dat het niet een slap 'niet officieel erkent/ondersteund' aftreksel wordt van SilverLight (Microsoft) zelf :Y)
Hoeveel waarde hecht je er aan dat het Mono project een keer in de MS TechNet Magazine heeft gestaan?

Door Tweakers user 7ven, maandag 18 augustus 2008 15:07

die komma 8 doet het hem ;) (8xxxxxxxxxxxxxxxxxxxxxxxxxx,8 mb... right)

Door Tweakers user haze010, dinsdag 19 augustus 2008 21:37

Ik ben zeer benieuwd hoe JavaFX het gaat doen t.o.v. Silverlight. Een groot voordeel is iig dat JavaFX multi-platform is.

Btw, de JavaFX Preview SDK is sinds kort te downloaden :)

Door ronald, donderdag 21 mei 2009 15:31

Bekijk deze web app eens http://www.ToolToMeet.com om te zien wat mogelijk is met isolated storage

Reageren is niet meer mogelijk