Windows 用于 online/offline 数据更新的 C# 表单应用程序

Windows Forms Application in c# for online/offline Data Update

你好。

我正在开发一个项目,该项目将使用位于服务器 www.this-server.com 的 REST API,并且会有一个 Windows 表单应用程序使用C#,我们称这个应用程序为 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.

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

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

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

如果您不能更改服务器,您将不得不编写一个客户端 (X),它可以区分同步记录和非同步记录。
我要么为不同步的东西创建第二个存储,要么创建额外的字段将记录标记为不同步。连接时,我会做一些魔术来更新本地 ID。本地 ID 不能自增。

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