使用.NET的脱机同步选项

时间:2009-09-30 19:11:02

标签: c# synchronization offline

我被要求研究处理我们应该构建的应用程序的方法。此应用程序,假设是一个用C#编写的Windows表单,如果已连接,它将直接向服务器发出命令,但如果应用程序处于脱机状态,则必须保持状态,就像它已连接一样,然后同步并发出数据更改/命令到服务器 连接后。

我不知道从哪里开始寻找。这类似于Google Gears,但如果我们使用Winform路线(看起来很可能,因为应用程序需要Web应用程序无法执行的其他功能),我认为我没有这个选项。 Microsoft Sync framework是可行的选择吗? Silverlight会做这样的事吗?还有其他选择吗?我已经谷歌搜索了一下,但是希望社区能够根据情况提供最佳信息。

2 个答案:

答案 0 :(得分:9)

Microsoft Sync Framework绝对支持您描述的场景,但我会说让它运行起来相当复杂。

有关Sync Framework的一点理解是它在同一个包中提供了两个完全不同的框架:

  • 同步框架
  • ADO.NET Sync services v.2

ADO.NET Sync服务是目前最容易设置的,但它们仅限于同步两个关系数据存储(尽管您可以将Web服务设置为两者之间的远程外观)。

核心Sync Framework没有这样的限制,但实现起来要复杂得多。当我在大约六个月前使用它时,我发现最好的资源来源是SDK,特别是文件/文件夹同步示例代码。

据我所知,两个'框架'之间几乎没有共享代码和类型,所以你必须选择其中一个。

在任何一种情况下,对托管同步代码的方式都没有限制,因此Windows Forms只是众多选项之一。

答案 1 :(得分:2)

如果我理解正确,这听起来像是一个实际的数据同步问题,我想让两个数据库保持同步。听起来更像是你想要一个可靠的机制让客户端在连接不稳定的环境中调用服务器上的函数,如果当时没有连接,你需要在连接恢复时立即调用该函数起来。

如果我的理解是正确的,这是一个选择。如果没有,这可能没有帮助。


对于一个深入的问题,这是一个非常简短的答案,但我们遇到了类似的情况,这就是我们处理它的方式。

我们有一个客户端应用程序需要监控商店中PC上的某些数据。当某些事件发生时,此客户端应用程序需要更新公司办公室中的服务器,最好是实时。但是,连接不是100%可靠,所以我们需要一个类似的机制。

我们通过尝试通过Web服务写入服务器来解决这个问题。如果调用Web服务时出错,则该命令将序列化为名为“等待上载”的文件夹中的XML文件。

我们的客户端应用程序在每个 n 分钟的定时器上运行例程。当计时器过去时,它会检查此文件夹中的XML文件。如果找到,它会尝试使用文件中保存的信息调用Web服务,依此类推,直到成功为止。成功调用后,将删除XML文件。

这听起来很糟糕,但编码很简单,并且已经完美无缺地工作了五年。它实际上是我们最全面无故障的应用程序,我们已成功地在其他地方实现了该模式