C# 从小型 LAN 上的网络附加存储获取时间

C# Get Time from Network Attached Storage on Small LAN

我不知道这是否可以做到,所以请耐心等待我。首先,我将描述环境。

我们有 8 台笔记本电脑,它们将离线使用以在独立的 Access 数据库中工作。我们有一个大型有线路由器。 NAS 驱动器连接到路由器。当笔记本电脑用户从外地回来时,他们会将笔记本电脑连接到路由器。 Access 数据库的前端是一个 C# 程序。 NAS 上存在数据库的主副本。 LAN 未连接到 Internet。

当用户将他们的笔记本电脑连接到 LAN 时,我们希望发生完全同步。因此,NAS 数据库中存在的任何新记录都将下载到他们的笔记本电脑上。他们在笔记本电脑上创建的任何新记录都将上传到 NAS。

所有主键都是 GUID。我为每个 table 添加了一个 DateTime 字段。每当添加或更改 table 中的任何记录时,时间戳都会更新。永远不会删除任何记录。

每个用户的笔记本电脑都会知道他们上次 snc 的日期时间。因此,下载到用户笔记本电脑将获得时间戳比上次同步更新的所有记录。上传到NAS也会按时间计算。

因此,我无法保证所有用户的笔记本电脑之间的时间都会同步。这些笔记本电脑永远不会连接到互联网或服务器。所以我不想使用用户笔记本电脑的时间来记录时间戳。如果可能的话,我希望时间来自 NAS。如果我知道NAS的MAC地址或IP地址,是否可以从NAS查询当前时间?这可行吗?如果是这样,有人能指出我正确的方向吗?

不要使用时间,因为它是你真正追求的东西的可怕模拟。时间可以倒退,时间可以不准确,可以由用户更改。即使您使用 NAS 盒中的时间,它仍然是一团糟。

您真正想要的是某种形式的交易系统,类似于 git 所做的。

如果您愿意为每条记录存储一个字段,为什么不存储某种提交 ID?我有两列 - 全局提交 ID 和本地提交 ID。

全局提交 ID 存储数据库记录与 NAS 同步时的最后一次提交 ID。本地提交 ID 存储客户端对记录所做的更改。

  • NAS 启动时为空。
  • Client1 与空的 NAS 同步。
  • Client1 通过从该记录的全局提交 ID 复制它来初始化每条记录的本地提交 ID。
  • Client1 离线。
  • Client1 更改了一条记录,因此增加了它的本地提交 ID。
  • Client1 连接到 NAS。
  • Client1 检查它的数据库副本 - 它发现某些记录的本地提交 ID 大于其数据库副本中该记录的全局提交 ID(这是 不是 NAS 的全局提交 ID 版本)。
  • Client1 将该记录发送到 NAS 数据库。
  • Client1 在其本地副本中更新该记录的全局提交 ID 副本。
  • NAS 增加该记录的全局提交 ID。
  • 客户端 1 扫描 NAS 数据库以查找全局提交 ID 大于客户端全局提交 ID 的记录,并在其本地数据库副本中更新这些记录。