代码之家  ›  专栏  ›  技术社区  ›  Pablo Castilla

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

  •  0
  • Pablo Castilla  · 技术社区  · 16 年前

    我想制作一个SL应用程序,它可以在本地保存某些数据,并在断开连接时访问它。我认为我可以公开服务中的实体(没有DTO),并将其保存在独立的存储中。为服务提供WCF RIA服务,但是SL应用程序呢?哪种方法是拥有“本地断开缓存模型”的最佳方法?

    提前谢谢,圣诞快乐

    2 回复  |  直到 13 年前
        1
  •  3
  •   Tom Glenn    13 年前

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

    其中一个最大的挑战(阅读:开发人员实际被雇用的原因)是创建一个断开连接的客户机是困难的。
    不是很难,但它需要软件工程经验和早期的权衡和计划。

    你问的问题本质上是“那么,我如何构建一个智能客户端?”
    关于这个主题有很多精彩的书,关于这个主题有几十个框架。所以,正如我所说,这里的回答并不容易。

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

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

    • 您尝试支持暂时性网络连接丢失的方案吗?
      或者网络连接丢失时间延长?

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

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

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

    • 在脱机模式下,用户能否查询以前检索到的数据?

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

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

    所以,如果你有一个购买应用,没有网络连接,用户可以创建一个新的订单吗? 如果是这样,您必须在本地缓存这些数据,并在第一个客户机<->同步周期中将其传输到服务器。

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

    您是否可以将脱机功能仅限于创建关键数据? 或者,您是否需要允许离线创建和更新所有数据并删除所有数据?

    我的建议是限制离线更改,因为如果没有,您将遇到非常复杂的场景来解决。 例如,上午12点,用户A删除客户1,12点05分,用户B为客户1下新订单。两个用户都处于脱机状态。现在去找出正确的业务解决方案是什么:)

    编辑:固定示例;)

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

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

    • 你的应用程序有多重要?

    这个问题的关键部分是——如果出了什么问题,你是否可以关闭那个用户? 这个问题决定了您是否需要在每个数据操作(新数据、检索到的数据、表单更改字段等)上坚持到磁盘,或者您是否可以只在应用程序关闭时坚持到磁盘。

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

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

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

    3. 面向对象数据库。
      在Silverlight IsoStore上运行oodbs是一种非常简单的数据持久化方法。
      只需转到RIA服务域conext,然后转到“myEntity.save()”。
      我知道Silverlight IsoStore上有3个oodbs运行:db40、mcobjects和silverlightdb。

    几个月前,根据Nikhilk的博客文章,RIA服务公司正计划支持“可离线性”。但是范围和时间线没有指定。

    干杯,
    ——贾斯廷

        2
  •  0
  •   Maciek    16 年前

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

    Video #1 Video #2