2009-12-25 78 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

相关问题