0

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

提前致谢,圣诞快乐

4

2 回答 2

3

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

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

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

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

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

  • 您正在尝试支持临时网络连接丢失的场景吗?
    还是长时间的网络连接丢失?

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

  • 客户是否保证通过网络连接启动?
    或者是否有可能在没有网络连接的情况下启动 OOB?

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

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

这是所有智能客户端之间的一个共同点。所有智能客户端应用程序都可以访问离线数据,但重要的是将此作为 IMO 的一项功能。

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

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

  • 可以离线更改的数据范围是多少?

您能否将离线功能仅限于创建关键数据?或者您是否需要为您的所有离线数据提供全方位的创建、更新和删除功能?

我的建议是限制离线更改,因为如果您没有解决,您将遇到非常复杂的场景。例如,在上午 12 点,用户 A 删除了 Customer#1,在 12:05,用户 B 为 Customer#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。

根据 NikhilK 几个月前的博客文章,RIA Services 正计划支持“offlianability”。但没有具体说明范围和时间表。

干杯,
--贾斯汀

于 2009-12-25T13:28:07.180 回答
0

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

视频#1 视频#2

于 2009-12-25T12:33:54.863 回答