WP7 - 開發前必懂的事 - Isolated Storage

Windows Phone 7開發前必懂的事-Isolated Storage

我相信有開發過Windows Mobile程式的人一定都會很熟悉,透過[檔案管理]去進入到所要的資料夾,

或是透過自行開發的程式去直接操作File System來讀取需要的檔案。但是到了Windwos Phone 7開始,

它採用Silverlight做為開發的元素,Silverlight它本身有一個先天設計,那就是獨立的記憶體處理區塊,

稱之為「Isolated Storage」。每一個Silverlight程式都只能控件自己的Isolated Storage,沒有辦法直接

透過檔案系統取得所需要檔案,像是我之前寫的DICT-SQLite字典的作法就沒有辦法正確的捉到SQLite,

那我該怎麼辦呢?修改程式之前,我們先重新來了解一下Isolated Storage到底是怎樣的一個東西。

 

過去我們在設計WinForm App時,要操作檔案系統來儲存用戶的設定、操作習慣或暫存資料是很容易的,

但在開發Web App時,要儲存這些資料可能就需要Postback去後端取得或是寫入Session或Cookie來取用,

這樣的做法,其實都有不少爭議,例如:Cookie或暫存資料被用戶不小心清掉了之類的問題。

Isolated Storage的設計就是讓每個App都可以處理自己獨立使用的區域,不會受其他App的影響,讓開發

的程式可以只關心自己內用的資料,雖然這樣也限制了一些開發的方便性,但我認為主體上是好的,

例如:瀏覽器某一個分頁掛掉了,不會影響其他分頁的運作,也許就是這樣的一個相似的用法。

 

Ioslate Storage主要提供的主要目的有二種:

‧Isolate File Storage:提供Ioslated Storage APIs去操作類似檔案管理系統的能力,但只限定在logical isolated

storage space。

‧Isolate Setting Storage:提供儲存Application Setting或是相關local setting的資訊。

IC381787

 

透過上圖的說明,可以清楚的了解到,每一個運作在WP7中的Siverlight程式都被分派獨立的區域,

裡面可以處理或建立自己程式需要的檔案與設定,另外有一個值得的一提的是:

「Quota APIs will reflect that there is no quota.」在WP7裡System.IO.IsolatedStorage.IsolatedStorageFile取

消了原本Quota的數量限制,不過這樣的空間還是會受限於硬體的空間啦。

 

IsolatedStorage這個NameSpaces裡有幾個重要的類別是操作IsolatedStorage用到的,以下將做個簡單的

說明:

System.IO.IsolatedStorage. IsolatedStorageException (Mscorlib.dll)

專門處理當使用IsolatedStorage發生失敗時,所引發的Exception內容。它使用ISS_E_ISOSTORE,錯誤

代碼為:0x80131450。一般會發生的錯誤主要有二類:

a. 遺失證據(Miss evidence):evidence代表的是該App的assembly與origin資訊。IsolatedStorage需要透過

evidence來驗證code的識別、連結正確的Isolated Storage space。這個資訊不見,就沒辦法運作了。

b. 錯誤的運用(Invalid operations):有一些FileStream的功能,不支援於Isolated Storage。

 

 

‧System.IO.IsolatedStorage.IsolatedStorageFile (Mscorlib.dll)

提供取得隔離區中的檔案、目錄的方法與屬性,包括:CreateDirectory()、CreateFile()、Quota等。

透過該類別取得控制權後,配合IsolatedFileStream存取區域內的資料。

 

 

System.IO.IsolatedStorage.IsolatedStorageSettings (System.Windows.dll)

提供可以在隔離儲存區中儲存索引鍵值組的 Dictionary<TKey, TValue>。建立的程式專案裡,可以

自動建立一個Dictionary類型的設定值,透過key/value的方式來取得/設定值。通常用於程式的共用

變數、使用者操作的設定,例如:程式的設定(啟始目錄、初始值、顯示頁數等。)

 

System.IO.IsolatedStorage.IsolatedFileStream (Mscorlib.dll)

該類別主要提供操作隔離區中檔案與目錄。它與FileStream相似,擴充了FileStream的功能,通常會

配合StreamWriter與StreamReader操作隔離區的內容。

 

以上是基本的System.IO.IsolatedStorage的介紹,這樣的設計觀念,也影響我們的開發設計,

基於這樣的概念下,我原本還想說,我直接把我建立的好的SQLite.db直接放置於整個WP7開發專案中,

就可以像過去直接Build測試Emulator中,後來才發現新的概念是這樣的。因此,我覺得這個是對於像我

一樣剛進入Silverlight領域中的開發人員,需要先釐清的一個觀念。在此分享給大家做個記錄。

 

References:

Isolated Storage Overview for Windows Phone

System.IO.IsolatedStorage Namespace

[C#][VB.NET]Isolated Storage 隔離儲存區

http://msdn.microsoft.com/zh-tw/library/cc189021(VS.95).aspx

http://www.dotblogs.com.tw/johnny/archive/2010/01/19/13121.aspx

http://msdn.microsoft.com/zh-tw/library/kx3852wf(v=VS.80).aspx

 

http://wildermuth.com/2008/09/27/WebClient_vs_WebRequest_in_Silverlight_2

http://msdn.microsoft.com/zh-tw/library/ms144203(v=VS.95).aspx

http://msdn.microsoft.com/zh-tw/library/cc189021(VS.95).aspx

WP7 Boot Camp with Jeff Brand -操作WP7 Emulator有問題都可以參考此處。