【问题标题】:Silverlight synchronizationSilverlight 同步
【发布时间】:2009-06-19 16:15:03
【问题描述】:

我正在开发一个 silverlight 应用程序,我需要在可以离线的不同 silverlight 实例中同步一个列表。我将有一个在线服务器来同步它们。

所以我们可以这样想象:

pc1: A1 A2 A3

pc2: A1 A2(A3 已删除)

服务器:A1 A2 A3(删除 A3 以反映 pc2 然后更新 pc1 也删除)

它也必须反映项目的重新排序。我想将它与 silverlight 在线和离线(在浏览器之外)一起使用。

你们中有人解决过类似的问题吗?有什么好的方法?

谢谢你, 阿图尔

【问题讨论】:

  • 你能澄清你的问题吗?我不确定您所说的“可以离线的不同 silverlight 实例”是什么意思
  • @Jason:我认为 Artur 的意思是他有两个用户都在运行 Silverlight 应用程序,编辑同一个列表。他希望编辑立即在客户端进行,即使没有与服务器的连接。当通信恢复时,他想将列表与服务器同步,然后其他客户端应该看到更改。

标签: c# silverlight synchronization


【解决方案1】:

在正常的断开连接的环境中,您会使用诸如同步服务之类的东西来处理这个问题,但这在 Silverlight 客户端上有点重。

我首先为列表中的每个项目指定一个 GUID。然后,我会在每个客户端和服务器上维护列表的插入、更新和删除日志。然后每次客户端连接到服务器时,您都必须进行合并同步。在这种情况下,您必须检测和处理冲突:

  • 有人编辑项目,而其他人删除它
  • 两个客户端同时编辑一个项目

您处理商品重新排序的要求增加了一些复杂性。您可能希望将重新排序记录为“在项目 x 之前移动”或“在项目 x 之后移动”操作,而不是更新列表中所有项目的所有索引。

【讨论】:

  • 苏格兰人,谢谢你的回答。我正在查看 Microsoft Sync Framework,看来我必须像你说的那样实现同步的东西。我试图避免它。我将项目存储在一个列表中,所以我可以说 InsertAt(x),问题就解决了。
  • @Artur:您基本上是在尝试实现一种乐观算法,您认为大多数更新不会发生冲突。但是,服务器仍然需要做很多工作来确保检测冲突、仲裁它们,然后用更改更新相关的客户端。这意味着在用户做出更改并认为其已提交,并且服务器必须覆盖该更改后,用户应该会收到一条消息,表明他们的更改已被覆盖或丢失。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-06
  • 2013-10-26
  • 2014-12-29
相关资源
最近更新 更多