The Moth
Developer, Former MVP, now at Microsoft - Best of
2004
,
2005
,
2006
,
2007
,
2008
,
2009
« Silverlight 2 Beta 1 Assemblies and Name...
|
Home
|
OpenFileDialog and FileDialogFileInfo in... »
IsolatedStorage in Siverlight 2 Beta 1
Tue, April 15, 2008, 01:49 AM under
Silverlight
Silverlight applications can store data (in files) onto the user's machine via the good old
Isolated Storage mechanism
. The API and restrictions of Isolated Storage are slightly tweaked in the Silverlight framework. Let's explore that.
Background Research
On both the full (aka desktop) framework and the Silverlight framework the implementation resides in
mscorlib.dll
and specifically the
System.IO.IsolatedStorage
namespace. On the desktop framework the classes in there are shown on the following class diagram (with the 2 most interesting classes collapsed for exploration later):
Note that in the Silverlight implementation there is
no
base abstract class
IsolatedStorage as on the desktop
or
INormalizeForIsolatedStorage
interface or
IsolatedStorageScope
enumeration. If you explore the desktop capabilities following the links above and relate them to Silverlight's restrictions you'll see why that is – I will not explore that in this post. Also note that the
IsolatedStorageException
class
is
available in Silverlight.
On the flip side, when looking in the namespace in the Silvelright version of mscorlib we additionally find the
IsolatedStorageSecurityOptions
enumeration that is only used by the other new type in the namespace: the
IsolatedStorageSecurityState
class which itself is not used or exposed publically by anything AFAICT! So basically, just ignore these two types for now as I can only presume that someone forgot to mark them as internal.
Using It
So back to looking at useful classes, and we are left with the 2 that exist in both variants (that are collapsed on the diagram further above):
IsolatedStorageFile
and
IsolatedStorageFileStream
. If you follow the links to the Silverlight documentation for those you'll find some differences compared to the desktop version and maybe the eagle-eyed among you can spot them in the following list of methods:
The
IsolatedStorageFileStream
class is the same as the desktop version but it omits 5
overloads of the constructor
(the ones that have a
bufferSize
option and the ones that do not have the
IsolatedStorageFile
argument). The
IsolatedStorageFile
class has 12 static methods removed (the
GetXXX
methods except one) and also adds 10 members of its own (I have marked these with an asterisk * in the screenshot above).
OK, enough of API spelunking; how do you use this thing? That's the easiest part as you just
follow the pattern of
:
1. Obtaining an
IsolatedStorageFile
(e.g. via the static method
GetUserStoreForApplication
)
2.
Creating
an
IsolatedStorageFileStream
object passing it in the reference from step one
3. Creating a normal
System.IO.
StreamWriter
or
StreamReader
passing it in the reference from step two
4. Using the
Stream
to read or write as per usual.
I have a
basic SL app that uses iso storage here so have a play
by entering some text/values and close/reopen the browser to see them remembered. To look at the code,
follow the steps here
. To browse on your local machine to the storage, paste this in your windows explorer (and drill in to find a
moth
file and a
_LocalSettings
):
%userprofile%\AppData\LocalLow\Microsoft\Silverlight\is
Wait, There Is More
What other things must you know? There is a default disc quota that Silverlight apps have and your app can request an increase (
IncreaseQuotaTo
) from the user, but only from the UI thread. There is a
good explanation of that and more here
. You may also be thinking what type of data you should be storing in iso storage (e.g. things that the browser caches anyway are not good candidates) and Chris
has some opinions here
(even if some of his facts are outdated).
In addition to all of the above, Silverlight adds a unique class (no equivalent on the desktop yet) that makes it easy to store application settings in isolated store: System.IO.IsolatedStorage.
ApplicationSettings
in
System.Windows.dll
. There are examples of its usage
here
and
here
(and I also use it in my basic sample above). If you are the decompiling type, look through reflector at the class's
Save method
to see how it uses the lower level APIs discussed further above combined with a
MemoryStream
Comments [0]
|
Permalink
Comments are closed.
About
My team's page on MSDN
Subscribe
Contact Form
My screencasts on channel9
Tags
AboutPresenting (5)
Blogging (7)
Career (5)
Communication (5)
dotNET (120)
Events (92)
GPGPU (2)
HPC (5)
IE7 RSS (6)
Links (129)
LINQ (23)
MobileAndEmbedded (148)
Orcas (128)
ParallelComputing (61)
Personal (32)
Random (42)
SideShow (12)
Silverlight (17)
SoftwareProcess (3)
UAC (14)
UserInterfaceDesign (5)
Vista (84)
VisualStudio (112)
Whidbey (31)
Windows (90)
WindowsServer2008 (3)
Latest Posts
Slides and code for MPI Cluster Debugger
DirectCompute
GPGPU
Code for Parallelism Features Tour
Managed code and the Shell – Do?
Dev Lead Job opening on my team
Best of "The Moth" 2009
Bug Triage
Parallel Computing Features Tour in VS2010
Parallel Debugging
"Parallel Programming Talk" show
Message Passing Interface (MPI)
Windows HPC Server links
Extension Manager in Visual Studio 2010
Core debugger enhancements in VS2010
Dump debugging with Parallel Stacks
Slides for Parallel Debugging windows
MPI Project Template for VS2010
Instructions for collecting dumps in VS2010
Positioning the Parallel Stacks window
Archives
March, 2010 (1)
February, 2010 (3)
January, 2010 (3)
December, 2009 (1)
November, 2009 (10)
October, 2009 (12)
September, 2009 (1)
August, 2009 (6)
July, 2009 (5)
June, 2009 (3)
May, 2009 (7)
April, 2009 (5)
March, 2009 (3)
February, 2009 (4)
January, 2009 (6)
December, 2008 (3)
November, 2008 (12)
October, 2008 (6)
September, 2008 (9)
August, 2008 (5)
July, 2008 (5)
June, 2008 (8)
May, 2008 (18)
April, 2008 (11)
March, 2008 (13)
February, 2008 (17)
January, 2008 (15)
December, 2007 (20)
November, 2007 (25)
October, 2007 (19)
September, 2007 (11)
August, 2007 (31)
July, 2007 (24)
June, 2007 (19)
May, 2007 (24)
April, 2007 (18)
March, 2007 (35)
February, 2007 (34)
January, 2007 (17)
December, 2006 (18)
November, 2006 (17)
October, 2006 (23)
September, 2006 (22)
August, 2006 (15)
July, 2006 (15)
June, 2006 (13)
May, 2006 (10)
April, 2006 (5)
March, 2006 (1)
February, 2006 (1)
January, 2006 (2)
December, 2005 (5)
November, 2005 (4)
October, 2005 (3)
September, 2005 (8)
August, 2005 (17)
July, 2005 (11)
June, 2005 (7)
May, 2005 (24)
April, 2005 (15)
March, 2005 (15)
February, 2005 (18)
January, 2005 (23)
December, 2004 (24)
November, 2004 (25)
October, 2004 (10)
September, 2004 (23)
August, 2004 (12)
July, 2004 (1)