討論范圍:介於WindowsPhone8的SDK發布在即,出於文章時效的考慮,需要說明本文只討論Windows Phone 7 下的數據存儲方式,但我想內容同樣適用於WindowsPhone8,只是WindowsPhone8會帶來新的數據存儲方式。
一、存儲方式概覽
- 本地項目內文件:被編譯成資源文件(Resource)或內容(Content)。
- 獨立存儲(Isolated Storage)
- 本地數據庫
- Web Service/ WCF
- Cloud/ Azure
二、詳細介紹
1、本地項目內文件
可以通過設置文件的生成方式(BuildAction)將文件設置成資源(Resource)被編譯到二進制代碼里,優點是隨時都能用,但是可能導致啟動時加載過慢。在代碼中,可以用Application.GetResourceStream來讀取。一般用這幾種場合:不考慮程序的啟動時間;不用更新資源文件(因為編譯進項目了就別指望了);減少程序的依賴項。
可以通過設置文件的生成方式(BuildAction)將文件設置成內容(Content)被編譯進項目文件,但不在二進制代碼里,優點是效率高,能被多個程序包共用。在代碼中,可以用XElement.Load來讀取。一般用這幾種場合:考慮程序的啟動時間;需要更新資源文件(因為編譯進項目了就別指望了)。
2、獨立存儲
如果要存儲用戶的數據,可以用獨立存儲,在Silverlight和WindowsPhon里都沒有直接存儲系統文件的接口,但是可以用獨立存儲將保存在用戶的設備上。可以用鍵值對的方式(IsolatedStorageSettings類),也可以用文件的方式(IsolatedStorageFile類)
3、本地數據庫
SQLCE:自己家的便攜數據庫格式,(7.1才有的)
SQLITE:第三方的便攜數據庫格式。
通過本人實際使用的感覺發現對多線程的讀寫處理都不怎么好,很容易異常,當然也可能我對其特性理解不夠深入。
4、Web Service
可能有以下幾種格式:
REST,POX,JSON,OData,SOAP。
而存取方式也有以下幾種方式:
Http類:可以直接用HttpWebRequest或WebClient類來調用WebService,通過HTTP協議向WebService發送請求,得到xml或json格式的返回數據。
引用WCF服務:WCF其實是一個WebService框架,支持多種協議(包括http,tcp),支持多種格式(soap,xml,atom)
使用OData客戶端: 其實也叫WCF數據服務,以前叫ADO.NET數據服務,一個以RSET形式存取現有數據的框架。WCF數據服務提供OData格式的數據,比如WindowsPhone與SharePoint交互時,SharePoint提供WCF數據服務,WCF數據服務處理所有http交互,序列化和其他的任務,意思是說App能直接通過http協議對遠程數據執行増刪改查,哪怕跨域也行。OData for WindowsPhone客戶端可能在codeplex上找到
5、Azure
也可以用Windows Azure來存取數據,但是免費的服務是有限制的,Azure在雲服務器上提供持久化的數據存儲,操作方式和WebService差不多。
三、各種方式的適用場合
編譯成資源文件 | 將只讀數據嵌入二進制程序 |
編譯成內容文件 | 不用重新編譯就能更新數據 |
獨立存儲 | 存取用戶信息 |
http類 | 用第三方的REST或POX服務存取數據 |
http類 | 獲取RSS訂閱 |
用代理類的WCF | 從SOAP服務存儲數據 |
WCF | 從Silverlight中將現有的類發布成服務 |
OData | 存取Odata數據 |
Azure | 存儲大量數據 |