在ClickOnce/WCF应用程序中缓存数据的最佳方式

本文关键字:数据 最佳 方式 缓存 ClickOnce WCF 应用程序 | 更新日期: 2023-09-27 17:49:36

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

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

问题2:所有这些数据一次下来,这将是有意义的缓存,并做某种后台同步,以确保它保持新鲜。但是如何缓存呢?我应该运送一个SQL Express DB与ClickOnce应用程序?或者有更简单的方法吗?考虑到ClickOnce应用的沙盒限制,你可以在哪里保存缓存数据?

在ClickOnce/WCF应用程序中缓存数据的最佳方式

对于问题1,您可以异步调用耗时较长的操作。另外,不要一次检索所有3000条记录。如果您的用例允许,您可以对数据进行分页。

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

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

如果不能将数据存储在本地数据库中(为此我建议使用SQL Compact 4.0而不是SQL Express),则必须拥有自己的更新逻辑。

或者,如果你不需要长时间缓存数据,你可以使用Enterprise Library缓存块并将数据存储在Application Storage中。如果您希望缓存查询和结果,而不是单个记录,则此方法最适合。