在silverlight中构建断开连接的应用程序的最佳方法

时间:2009-12-25 12:08:25

标签: silverlight caching disconnected

我想创建一个SL应用程序,可以在本地保存某些数据,并在断开连接时访问它。我认为我可以暴露服务中的实体(没有dtos),并将其保存在隔离存储中。 WCF ria服务的服务,但SL应用程序呢?这是拥有“本地断开连接的缓存模型”的最佳方式?

提前致谢并祝圣诞快乐

2 个答案:

答案 0 :(得分:3)

任何直接回答这个问题的人都不知道他在说什么。

最大的挑战之一(阅读:为什么开发人员实际受雇)是创建一个断开连接的客户端很难 不是很难,但它需要软件工程经验和早期权衡和计划。

您提出的问题基本上是“嗯,我如何构建智能客户端?” 有很多关于这个主题的精彩书籍和关于这个主题的几十个框架。所以,正如我所说,这里没有简单的答案。

您首先要问自己:您需要什么级别的智能客户? 您是否在构建完全断开连接的客户端半在线/离线客户端?部分启用的离线客户端?等等等。

我通常看待它的方式是通过功能:

  • 您尝试支持临时网络连接丢失的方案是什么? 或者长时间的网络连接丢失?

离线时间的长度(更具体地说,如果应用程序重新启动)确定您的缓存是保存在磁盘上还是可以信任RAM。

  • 客户是否可以通过网络连接启动? 或者是否有可能没有网络连接的OOB启动?

如果客户端可能在没有网络连接的情况下从OOB启动,则必须将脱机数据存储到磁盘。您无法在启动时从服务器获取新数据。

  • 在离线模式下,用户可以查询以前检索到的数据吗?

这是所有智能客户端之间的一个共同点。 所有智能客户端应用程序都可以访问脱机数据,但将其作为IMO功能进行调用非常重要。

  • 在离线模式下,用户可以创建新数据吗?

因此,如果您有一个采购应用程序并且没有网络连接,用户是否可以创建新订单? 如果是这样,您将必须在本地缓存此数据并在第一个客户端< - >同步周期将其传输到服务器。

  • 可以脱机更改的数据范围是什么?

您是否可以将离线功能限制为创建关键数据? 或者你是否需要允许全方位的Create&更新&删除所有离线数据?

我的建议是限制离线更改,因为如果你没有,你将遇到非常复杂的场景来解决。 例如,在上午12点,用户A在12:05删除客户#1。用户B为客户#1发布新订单。两个用户都处于离线状现在去弄清楚那里正确的商业解决方案:)

编辑:修复示例;)

  • 在离线模式下,当用户查询之前未检索到的数据时会发生什么?

假设您的共享数据(例如客户表)非常庞大。 你有1000万客户。您无法在所有客户端上存储该敏感数据。 那么当一个离线应用程序需要超出它没有的客户时会发生什么? 你能不能对最终用户说“上这个网络,你呢?”。

  • 关键任务对您的应用有何影响?

该问题的主要部分是 - 如果出现问题,你可以关闭该用户吗? 此问题确定是否需要在每个数据操作(新数据,检索到的数据,表单更改字段等)上保留磁盘,或者只有在应用程序关闭时才能保留到磁盘。

在查看Silverlight时,您有一些很好的技术选择。

  1. 将数据保存在内存中。
    如果您的功能集仍然存在,请将RIA服务域上下文保留为静态实例 当客户端失去网络连接时,您仍然可以在RAM上工作。

  2. 如前所述,IsoStore是您的朋友。
    您获得了1MB(浏览器内)/ 25MB(浏览器外)您自己神奇的私有磁盘空间,如果您的应用需要它,您可以要求更多。
    将数据序列化到磁盘。

  3. OODB - 面向对象的数据库。
    在Silverlight IsoStore上运行的OODB是一种非常简单的持久数据保存方式 只需转到您的RIA Services Domain Conext,然后转到“myEntity.Save()” 我知道在Silverlight IsoStore上运行3个OODB:db40,mcObjects和SilverlightDB。

  4. 根据NikhilK几个月前的博客文章,RIA Services计划支持“offlianability”。但是未指定范围和时间表。

    干杯,
    - 贾斯汀

答案 1 :(得分:0)

用于在本地计算机上保存数据的技术之一称为“隔离存储”。我建议从那开始。

Video #1 Video #2