使用.NET进行离线同步的选项

6
我被要求研究处理我们应该构建的应用程序的方法。这个应用程序,假设是用C#编写的Windows窗体,如果连接了服务器,将直接向服务器发出命令,但如果应用程序脱机,则必须保持状态,就像它已连接一样,并在连接后同步并向服务器发出数据更改/命令。
我不确定从哪里开始查找。这类似于Google Gears,但如果我们选择Winform路线(鉴于应用程序需要其他函数,Web应用程序无法执行),我认为我没有这个选项。Microsoft Sync framework是可行的选择吗?Silverlight有类似的功能吗?还有其他选项吗?我已经在谷歌上搜索了一些,但希望社区能就最佳方案提供意见。
2个回答

9
微软同步框架绝对支持您所描述的场景,但我认为它相当复杂,需要一些技巧才能使其正常工作。
了解同步框架的一件事是它实际上是两个完全不同的框架,尽管它们在同一个包中:
- 同步框架 - ADO.NET同步服务v.2
ADO.NET同步服务是设置最简单的,但它们受限于同步两个关系型数据存储(尽管您可以设置Web服务作为两者之间的远程外观)。
核心同步框架没有这样的限制,但实现起来更加复杂。大约六个月前我使用它时,我发现学习的最佳来源是SDK,特别是文件/文件夹同步示例代码。
据我所知,两个“框架”之间几乎没有代码和类型共享,因此您必须选择其中之一。
无论哪种情况,都没有对如何托管同步代码的约束,因此Windows窗体只是众多选项之一。

2
如果我理解正确,这听起来不像是一个实际的数据同步问题,而更像是您想要在连接不稳定的情况下为客户端调用服务器上的函数提供可靠的机制,并且如果在此期间没有连接,则希望在连接恢复后立即调用该函数。
如果我的理解是正确的,这是一种选择。如果不是,这可能不会有所帮助。
这只是一个深入问题的简短答案,但我们曾经遇到过类似的情况,以下是我们处理此问题的方式。
我们有一个客户端应用程序需要监视商店中PC上的某些数据。当发生某些事件时,此客户端应用程序需要实时地更新我们在公司办公室的服务器。然而,连接不是100%可靠,因此我们需要类似的机制。
我们通过尝试通过Web服务写入服务器来解决此问题。如果调用Web服务时出现错误,则将命令序列化为名为“waiting to upload”的文件夹中的XML文件。
我们在客户端应用程序中设置了一个定时器,每隔n分钟运行一次例程。当时间到达时,它会检查此文件夹中的XML文件。如果找到,则尝试使用文件中保存的信息调用Web服务,直到成功为止。成功调用后,删除XML文件。
这听起来很奇怪,但编码简单,并且五年来一直运行完美。实际上,这是我们最无故障的应用程序,并且我们已成功地在其他地方实施了此模式。

正确的解释,没错。我在考虑使用MSMQ,这样它就是一种“发射并忘记”的方法,会不断尝试直到成功,但本质上与您的方法相同。谢谢! - Chris
MSMQ也是一个不错的选择。我们没有使用它,因为我们不想在所有客户端上都设置它,而我们采取的方法对于安装团队和管理员来说没有额外的步骤,尽管对于开发团队来说需要额外的步骤。但如果MSMQ适合您的话,那么我认为这是一个非常好的选择。 - David
你有什么建议吗?当应用程序离线时,可以在同一应用程序中使用 MSMQ 吗?我需要为 MSMQ 安装接收器吗? - coder771

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接