【问题标题】:Windows Forms Application in c# for online/offline Data Updatec# 中的 Windows 窗体应用程序用于在线/离线数据更新
【发布时间】:2018-12-21 02:45:51
【问题描述】:

您好。

我正在开发一个项目,该项目将使用位于服务器上的 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。

【问题讨论】:

  • 这写的太宽泛了。只需搜索离线应用同步模式。如果您担心 ID,则在离线客户端上使用虚拟 ID,直到数据发送到服务器并替换为真实 ID。

标签: c# api asynchronous offlineapps shared-data


【解决方案1】:

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

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

【讨论】:

  • 谢谢!但是,您的方法将帮助我更好地实现这件事,但无论@kooch 建议如何使用 MSMQ 都会大大提高性能,因为该机制是为这样的事情而设计的。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2011-06-23
    • 2021-01-31
    • 2019-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多