【问题标题】:The best way of caching data in a ClickOnce/WCF application?在 ClickOnce/WCF 应用程序中缓存数据的最佳方式?
【发布时间】:2011-04-07 13:33:06
【问题描述】:

我有一个 SaaS 应用程序,它作为 ClickOnce 应用程序部署到客户端,客户端通过 WCF NetTcp 连接连接到我的云服务器。数据全部存储在服务器上,但客户端需要能够看到他的数据。

一切正常,但是当有大量数据要传输时,我遇到了一些麻烦,例如在一个表中,一个客户端可能有大约 3,000 条记录,这需要很长时间才能通过 WCF 连接。这就是问题 1:如何从服务器中提取必要的数据。现在,尝试同步进行,它只是超时。我可以提高超时限制,但这感觉有点像蛮力。您会推荐某种异步解决方案吗?如果是,您将如何通过 WCF 来做到这一点?

问题 2:将所有这些数据下载一次后,将其缓存并进行某种后台同步以确保其保持新鲜是有意义的。但是如何缓存呢?我应该使用 ClickOnce 应用程序发布 SQL Express 数据库吗?或者有没有更简单的方法?考虑到 ClickOnce 应用的沙盒限制,您可以在哪里保存缓存数据?

【问题讨论】:

    标签: c# wcf clickonce


    【解决方案1】:

    对于问题1,您可以invoke the operation that takes a long time asynchronously。还要考虑不要一次检索所有 3000 条记录。如果您的用例允许,您可以分页数据。

    对于问题 2,是的,您可以缓存它。如果有意义的话,你可以做一些简单的事情,比如内存中的线程安全字典,或者数据的线程安全单例实例。如果您需要持久化到磁盘,我会选择基于文件的数据库like SQL CESQLLite,这样就不需要安装客户端。

    【讨论】:

      【解决方案2】:

      根据数据以及允许缓存或同步的数据量,您可以查看 SQL Compact 3.5(不是 4.0)中的复制功能,因为它支持与 SQL 服务器的部分同步。

      如果您无法将数据存储在您自己的本地数据库中(为此我推荐使用 SQL Compact 4.0 而不是 SQL Express),那么您就必须拥有自己的更新逻辑。

      或者,如果您不需要长时间缓存数据,您可以使用企业库缓存块并将数据存储在应用程序存储中。如果您想缓存查询和结果而不是单个记录,则此方法最适合。

      【讨论】:

        猜你喜欢
        • 2014-02-20
        • 2012-10-07
        • 2010-09-05
        • 1970-01-01
        • 1970-01-01
        • 2023-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多