0

问候。

我正在开发一个项目,该项目将使用位于服务器上的 REST API,例如 www.this-server.com,并且将有一个使用 C# 的 Windows 窗体应用程序,让我们将此应用程序称为 X。

这个 X 将安装在全球不同位置的多台机器上,他们将使用该应用程序。假设有 90 个站点或机器安装了 X,但互联网仅连接到其中的 85 个站点。

我想要的是剩下的 5 个站不应该停止工作,我的意思是 CRUD 操作在应用程序 X 的本地数据库中离线进行。

一旦有可用的网络,剩余的 5 个站点应将其更改同步到 www.this-server.com 上的主 API,并同时获取服务器上发生的任何更改。

我知道它需要这样的东西,即所谓的智能客户端:https ://www.codeproject.com/Articles/1134703/Net-application-that-works-online-and-offline-Sma

但我遇到的问题是,假设 API 中的几个表中有一个自动增量字段,这些字段将如何生成并且会有任何冲突。

这样的东西:https ://dba.stackexchange.com/questions/104700/sync-many-client-database-to-one-central-database

我的意思是这件事甚至是可能的,如果应用程序 X 有单个实例同时运行,它可能是可能的,但在我的情况下,有 90 个 API 同时使用。

任何帮助、教导、建议将不胜感激。问候贾扬特

PS:我是一个新手开发者,还在学习,所以有很多东西要看,不要对我生气:-D。

4

2 回答 2

0

您是否完全沉迷于使用 REST?

我假设您使用它作为将数据从 X 发送到服务器的传输机制。如果 X 没有与服务器的连接,那么维护已进行的任何更改的本地副本将非常麻烦。

您可以考虑使用不同传输机制的可能性,例如 MSMQ。这似乎更适合这种类型的应用程序,因为 MSMQ 会在本地存储消息,直到它可以连接到远程系统。如果有连接,则可以立即发送消息。就好像您在进行 REST 调用一样。如果需要,MSMQ 甚至可以配置为通过 HTTP 端口发送。可能您可以利用一种方法,使用 REST 从服务器检索数据并使用 MSMQ 之类的东西将数据发送到服务器。

于 2018-07-12T19:40:28.817 回答
0

如果您无法更改服务器,则必须编写一个客户端 (X),该客户端 (X) 在同步记录和未同步记录之间可能有所不同。
我要么为不同步的东西创建第二个存储,要么创建额外的字段,将记录标记为不同步。连接时,我会做一些魔术来更新本地 ID。本地 ID 不能自增。

最好,如果您可以更改服务器,我会选择不使用 REST API 中的自动增量。相反,我会使用任何人都可以在全球范围内创建的 Guid。
出于性能原因,您可以在本地使用整数自动增量 ID。但是对于与外部系统的任何通信,隐藏 ID 并改用 Guid。

于 2018-07-12T21:05:41.607 回答