如何使用servicestack创建在线-离线应用程序

时间:2018-10-12 12:38:47

标签: wpf servicestack

我正在尝试弄清楚如何创建在大型应用程序中使用的离线/在线方法。

现在,应用程序的每个部分都有自己的模型和数据层,它们直接从SQL向SQL读取/写入数据。我的老板要求我创建一种缓冲区,以防连接失败,该缓冲区可用于存储数据,直到与SQL的连接恢复活动状态为止。

我要创建的东西是这样的:将所有数据层移到服务堆栈服务中。一旦与SQL的连接不可用,每个“ GET”方法都应查询数据库并将结果存储到缓存中以供重用。如果连接失败,则每个“ POST”和“ PUT”方法都必须执行其操作或将请求存储到缓存中。恢复与SQL的连接后,必须清除此缓存。

我该如何实现?我的是在Windows 10上运行的WPF应用程序。

最好的问候 恩里科

1 个答案:

答案 0 :(得分:1)

维护服务器上的缓存不会帮助创建脱机应用程序,因为客户端将无权访问服务器以检索那些缓存。相反,您需要维护客户端上的状态,以便在失去网络访问的情况下,客户端可以从其自己的本地缓存中加载。

在架构上,这是使用单页应用程序框架(例如Vue(+ Vuex)或React(+ Redux或MobX)的Web应用程序最容易实现的。 ServiceStack TechStacksGistlyn应用是很好的例子(有据可查),它们将客户端状态存储在Vuex商店(对于在Vue中创建的TechStack)或Redux商店(对于在React中创建的Gistlyn)中,或Old TechStacks(使用AngularJS创建)。

有关此结帐Gistlyn's snapshots feature的好示例,其中可以从单个序列化的JSON对象恢复整个客户端状态,也可以使用Real Time Network Traveler example的方法在其中通过网络对初始客户端状态和增量进行序列化可以对多个连接的客户端进行实时远程控制。

它们并不是为离线而设计的,但是其架构自然会导致具有离线功能,这要感谢首先从其本地存储中加载的每个页面,然后它会发出请求以更新其本地缓存,这要归功于反应性JS SPA fx的页面,页面将自动更新为服务器的最新版本。

消息传递API

HTTP具有同步紧密耦合,这对于脱机通信而言并不理想,您想要的是设计写API,使它们成为“单向/异步”,因此您可以在客户端上实现一个消息队列,该队列将请求DTO排队并通过重新发送它们(使用指数补偿)将它们可靠地发送到服务器,直到成功且没有错误。然后,对于需要通知客户端其请求已被处理的情况,可以通过Server Events或通过客户端长时间轮询服务器以查看其请求是否已被处理来完成。