同步噩梦 - 是否可以在没有IIS的2个SQL CE实例之间使用合并复制(或RDA)?

chi*_*uit 5 distributed merge-replication rda microsoft-sync-framework

我们面临以下问题,涉及保持以下同步:

  • 1集中服务器(IIS/MSSQL 2005)
  • ClickOnce分发的许多桌面WPF客户端
  • 许多移动客户端 - (Windows CE)

alt text http://img502.imageshack.us/img502/8246/deployment.png

有了这些棘手的限制:

  • 所有同步关系都是双向的
  • 桌面和移动节点需要离线模式
  • 移动节点不能与中央服务器同步,而是通过USB与桌面节点同步.桌面节点充当移动客户端的服务器,而不是中央服务器.然后,移动节点的更新需要通过与桌面同步传播到中央服务器,然后将该桌面与中央服务器同步. p.

讨厌.

为了同步桌面和服务器,我们知道我们可以使用合并复制 - 服务器是提供商,桌面作为订户,一切都很好.但是同步移动和桌面节点呢?看似桌面不能是没有SQL Server + ISS的发布者,对吧?我们只能将MSSQL CE部署到桌面.

即使是这种情况,节点既可以是订户又可以是发布者?我怀疑Merge Replication架构不支持这种安排 - 看起来hub和spoke是唯一受支持的模型.

我们正在尝试确定是否可以取消RDA或合并复制作为可能的解决方案 - 如果是这样,我们可能会继续使用MS Sync Framework.

也许我们可以考虑其他技术?

谢谢大家,

阿什利

更新:我们刚刚开始玩MS Sync Framework,它摇滚!

Mus*_*sis 7

由于与您的具体问题没有直接关系的原因,我认为您可以继续将RDA/Merge Replication作为可能的解决方案.Microsoft没有公布此信息(出于显而易见的原因),但在复制过程中可以丢弃网络连接的情况下(在Windows Mobile客户端中频繁发生),合并复制并非100%可靠.

此问题的结果是对客户端数据库所做的更改有时不会完全传播到master数据库,但是没有检测到这种情况发生的迹象.正如您可以想象的那样,这是一件坏事,特别是如果您基于RDA按照广告宣传的假设销售您的客户端.我们发现这个问题的唯一短期解决方案是实现一个非常笨重的双重冗余过程,以确认客户端上添加或修改的每条记录都没有错误地发送到服务器.长期解决方案是永远不再使用RDA.

这个问题可能已经在最近版本的RDA中得到修复(我们的问题发生在2年前的最新版本),但我永远不会知道(一旦被咬了两次害羞).

更新:顺便说一下,我已经和很多人谈过这个问题(包括微软支持技术人员)否认这可能是真的,但是很容易验证:在客户端上添加一堆数据,然后启动复制,然后将USB电缆从设备中拉出(假设您的客户端是通过ActiveSync连接的Windows Mobile),而在此期间.

如果我看起来有点恼火,那部分是因为这是MS技术最终被迫说的话(实际引用):"好吧,只是继续复制 - 数据最终会合并".