2009-12-25 91 views
0

我想製作一個SL應用程序,它可以在本地保存某些數據,並在它斷開連接時訪問它。我認爲我可以揭示服務中的實體(無dtos),並將其保存在獨立存儲中。 WCF ria服務的服務,但SL應用程序呢?擁有「本地斷開連接的緩存模型」的最佳方法是什麼?提前在silverlight中構建disconected-ready應用程序的最佳方式

感謝和聖誕快樂

回答

3

任何人誰給你一個直接回答這個問題,不知道他在說什麼。

最大的挑戰之一(閱讀:爲什麼開發人員實際僱用)是創建一個斷開連接的客戶端很難。
不是非常困難,但它需要軟件工程經驗和早期折衷和計劃。

你問的問題實質上是「嗯,我如何構建智能客戶端?」
關於這個話題,有很多精彩的書籍和幾十個關於這個主題的框架。所以,正如我所說,這裏不容易回答。

你必須問自己的第一件事是:你需要什麼級別的智能客戶端?
你在建立一個完全斷開連接的客戶端嗎?半在線/離線客戶端?部分啓用的離線客戶端?等等等等等等

的方式,我通常看它是通過特色:

  • 是你想支持一個臨時網絡連接中斷場景?
    或長時間的網絡連接丟失?

的離線時間長度(更具體地說,如果有應用程序的重新啓動)來確定您的緩存是否將被保存在磁盤上或可被信任到RAM中。

  • 客戶是否向網絡連接啓動?
    還是有沒有網絡連接的OOB啓動的可能性?

如果客戶端可能在沒有網絡連接的情況下從OOB啓動,則必須將脫機數據存儲到磁盤。您將無法在啓動時從服務器獲取新數據。

  • 在離線模式下,用戶可以查詢以前檢索的數據嗎?

這是所有智能客戶端之間的共同線程。 所有智能客戶端應用程序都可以訪問離線數據,但將此稱爲IMO功能很重要。

  • 在離線模式下,用戶是否可以創建新數據?

因此,如果您有購買應用程序且沒有網絡連接,用戶是否可以創建新訂單? 如果是這樣,您必須在本地緩存這些數據,並在第一個客戶端 - >同步週期中將其傳輸到服務器。

  • 什麼是可以脫機更改的數據範圍?

您可以限制離線功能僅用於創建關鍵數據嗎? 或者您是否需要允許創建全部光譜&更新&刪除所有數據脫機?

我的建議是限制離線更改,因爲如果沒有,您將遇到非常複雜的情況來解決。 例如,在上午12點,用戶A在12:05刪除客戶#1,用戶B爲客戶#1發出新訂單。這兩個用戶都離線了。現在去找出什麼是正確的業務解決方案有:)

編輯:固定例子)

  • 當在離線模式下,什麼樣的以前未檢索到的數據,當用戶查詢會怎麼樣?

讓我們假設你的共享數據(例如客戶表)是龐大的。 你有10M個客戶。您無法將敏感數據存儲在所有客戶端上。 那麼當離線應用程序需要多餘的客戶時,會發生什麼? 你對最終用戶說:「讓這個該死的網絡,你願意嗎?」。

  • 您的應用程序的使命至關重要?

該問題中的intersting部分是 - 如果出現問題,您可以關閉該用戶嗎? 這個問題決定了是否需要在每個數據操作(新數據,檢索數據,表單更改字段等)上保留磁盤,或者只有在應用程序關閉時才持久保存到磁盤。

在看Silverlight時,你有一些很好的技術選擇。

  1. 將數據保存在內存中。
    如果您的功能集存活下來,請將RIA服務域上下文保留爲靜態實例。
    當客戶端失去網絡連接時,您仍然可以使用RAM。

  2. 如前所述,IsoStore是你的朋友。
    您可以獲得1MB(瀏覽器內)/ 25MB(瀏覽器外)您自己的魔法專用磁盤空間,如果您的應用程序需要它 - 您可以要求更多。
    將數據序列化到磁盤。

  3. OODB - 面向對象的數據庫。
    在Silverlight IsoStore上運行的OODB是保持數據的絕妙簡單方法。
    只需轉到您的RIA服務域連接,然後轉到「myEntity.Save()」。
    我知道Silverlight IsoStore上有3個OODB:db40,mcObjects和SilverlightDB。

根據NikhilK幾個月前的博客文章,RIA Services計劃支持「關閉性」。但範圍和時間表沒有指定。

乾杯,
- 賈斯汀

0

一個用於保存本地計算機上的數據的技術被稱爲「獨立存儲」。我建議從此開始。

Video #1 Video #2

相關問題