我想制作一个 SL 应用程序,可以在本地保存某些数据并在断开连接时访问它。我认为我可以公开服务中的实体(无 dto),并将其保存在隔离存储中。服务的 WCF ria 服务,但是 SL 应用程序呢?拥有“本地断开连接的缓存模型”的最佳方式是什么?
提前致谢,圣诞快乐
我想制作一个 SL 应用程序,可以在本地保存某些数据并在断开连接时访问它。我认为我可以公开服务中的实体(无 dto),并将其保存在隔离存储中。服务的 WCF ria 服务,但是 SL 应用程序呢?拥有“本地断开连接的缓存模型”的最佳方式是什么?
提前致谢,圣诞快乐
任何给你直接回答这个问题的人都不知道他在说什么。
最大的挑战之一(阅读:为什么实际雇用开发人员)是创建断开连接的客户端很困难。
不是很难,但它需要软件工程经验以及早期的权衡和规划。
您问的问题本质上是“好吧,我如何构建智能客户端?”
有很多关于这个主题的精彩书籍和几十个框架都围绕这个主题发布。所以,正如我所说,这里没有简单的答案。
您首先要问自己的是:您需要什么级别的智能客户端?
您是否正在构建一个完全断开连接的客户端?半在线/离线客户端?部分启用的离线客户端?等等等等等等
我通常看待它的方式是通过功能:
离线时间的长度(更具体地说,如果应用程序重新启动)决定了您的缓存是保存在磁盘上还是可以信任到 RAM。
如果客户端可能在没有网络连接的情况下从 OOB 启动,则必须将脱机数据存储到磁盘。您将无法在启动时从服务器获取新数据。
这是所有智能客户端之间的一个共同点。所有智能客户端应用程序都可以访问离线数据,但重要的是将此作为 IMO 的一项功能。
那么,如果你有一个采购应用程序并且没有网络连接,用户可以创建一个新订单吗?如果是这样,您必须在本地缓存此数据并在第一个 Client<->Sync 周期将其传输到服务器。
您能否将离线功能仅限于创建关键数据?或者您是否需要为您的所有离线数据提供全方位的创建、更新和删除功能?
我的建议是限制离线更改,因为如果您没有解决,您将遇到非常复杂的场景。例如,在上午 12 点,用户 A 删除了 Customer#1,在 12:05,用户 B 为 Customer#1 发出了新订单。两个用户都处于离线状态。现在去弄清楚那里的正确业务解决方案是什么:)
编辑:固定示例;)
假设您的共享数据(例如客户表)很大。你有 1000 万客户。您不能将敏感数据存储在所有客户端上。那么当离线应用程序需要超出它没有的客户时会发生什么?您可以对最终用户说“进入该死的网络,好吗?”。
该问题中有趣的部分是 - 如果出现问题,您可以关闭该用户吗?这个问题决定了您是否需要在每个数据操作(新数据、检索数据、表单更改字段等)上保存到磁盘,或者您是否可以仅在应用程序关闭时保存到磁盘。
在查看 Silverlight 时,您有一些不错的技术选择。
将数据保存在内存中。
如果您的功能集仍然存在,请将 RIA 服务域上下文保持为静态实例。
当客户端失去网络连接时,您仍然可以使用 RAM。
如前所述,IsoStore 是您的朋友。
您可以获得 1MB(浏览器内)/25MB(浏览器外)您自己神奇的私有磁盘空间,如果您的应用需要 - 您可以要求更多。
将数据序列化到磁盘。
OODB - 面向对象的数据库。
在 Silverlight IsoStore 上运行的 OODB 是一种非常简单的数据持久化方式。
只需转到您的 RIA Services Domain Conext,然后转到“myEntity.Save()”。
我知道在 Silverlight IsoStore 上运行 3 个 OODB:db40、mcObjects 和 SilverlightDB。
根据 NikhilK 几个月前的博客文章,RIA Services 正计划支持“offlianability”。但没有具体说明范围和时间表。
干杯,
--贾斯汀