Wcf SyncFramework 2.1更新和;删除似乎没有正确应用

Wcf SyncFramework 2.1更新和;删除似乎没有正确应用,wcf,microsoft-sync-framework,Wcf,Microsoft Sync Framework,我正在使用SyncOrchestrator将SQL Server 2008与~6个SQL Server 2008 Express客户端(我相信所有R2客户端)同步,或者专门使用SyncOrchestrator作为基础,只需稍加修改。据我所知,这意味着所有连接都是对等点或节点 我有两个望远镜。一个是下载,另一个是上传。“仅下载”范围中充斥着标识栏,主要是因为我不知道还有什么更好的方法,仍然无法在客户端将guid作为PK引入。这并不完全重要,因为所有客户端都应该有大约8个表的精确副本,这些机器不会以

我正在使用SyncOrchestrator将SQL Server 2008与~6个SQL Server 2008 Express客户端(我相信所有R2客户端)同步,或者专门使用SyncOrchestrator作为基础,只需稍加修改。据我所知,这意味着所有连接都是对等点或节点

我有两个望远镜。一个是下载,另一个是上传。“仅下载”范围中充斥着标识栏,主要是因为我不知道还有什么更好的方法,仍然无法在客户端将guid作为PK引入。这并不完全重要,因为所有客户端都应该有大约8个表的精确副本,这些机器不会以任何方式接触这些数据,只会读取它们

仅上载作用域使用guid,因为幸运的是我可以控制数据库的这一部分,并且使用相同标识种子的10个客户端无法正确地同步回服务器。这两个作用域都使用默认的批量插入配置和整个9码配置,所以我在配置端不应该做任何事情来搞砸这件事

我最初没有使用PerformPostRestoreFixup设置所有内容,初始数据库将与主机的insert语句手动同步。这看起来不错,但似乎从未应用过更新或删除。您可以放心地忽略这一点(仅用于历史准确性和证明我的无能),因为我随后使用VS2010数据库项目将数据库重建为仅模式&已同步。然后我使用这里概述的步骤(http://social.microsoft.com/Forums/br/syncdevdiscussions/thread/9ac6d1a1-1565-4b82-a8d8-3d4a9ff5d07b)(同步、备份、恢复、调用performpostrestorefixup、在x客户机上同步)在我的开发框中,我正在设置所有这些功能,我可以很好地看到更新和删除。当我将它部署到x客户机时,我没有看到我认为应该看到的数据库镜像

初始同步将出现问题,并尝试再次同步所有记录。我相信这是意料之中的。在客户端上的ApplyChangeFailed事件期间,我将DbConflictType.Errors以外的所有内容设置为ApplyAction.RetryWithForceWrite。这可能是问题的根源,因为我最初认为应该这样做,以迫使客户进行更改。我希望服务器在这种情况下始终获胜,但在跟踪过程中,我总是在批量插入/更新调用过程中看到短语“Local wins”。我可能在重新应用之前看到了错误,但这看起来很尴尬

我唯一的问题似乎是只下载范围。最初的客户端数据库现在大约有一周的历史了,如果我使用PerformPostStoreFixup步骤,我看不到从现在到那时应用的任何更新。就好像SyncFx几乎更喜欢客户端的空白数据库来启动初始同步,那么所有的更新似乎都可以正常应用,没有ApplyChangesFailed事件启动

如果有人以前见过这个,或者知道去哪里,我将不胜感激。我的大脑在试图确定到底发生了什么时崩溃了。我最后的努力是将空白数据库部署到所有客户端,并让它们启动同步。我在开发端对此没有任何问题,但我只能测试另一个客户机,以了解这是否会有什么不同。除此之外,我不知道该怎么做,除了继续做手动同步,这将完全违背这个目的。我原以为PerformPostRestoreFixup会完全缓解这个问题,但不管有没有它,我似乎都有同样的问题,或者我没有考虑我需要做什么


谢谢

我想报告并用我的发现结束条目

当我部署以前配置的客户机数据库时,我经常会得到以下日志形式的ApplyChangeFailed事件:

[05:30:41 PM]-ApplyChange失败:表名:,阶段:ApplyingInsert,冲突类型:LocalInsertRemoteInsert,操作:RetryWithForceWrite

这是我所期望的,因为它试图重新插入已经存在的数据。在RetryWithForceWrite期间,应该将其更改为update语句,但我发现数据没有使用发送的内容进行更新


当我用一个完全空白的数据库启动每个客户机并在本地进行配置后,所有这些错误都消失了。这就好像每个客户机都只需要它设置的唯一id。我还使用了x64版本,而不是x86版本,这可能会对结果产生一些影响或没有影响。我希望我能确定到底发生了什么,但似乎在有疑问时,只要可能,从绝对零开始,让同步填充数据是最安全的选择。

在您提到的下载范围上,你有关于ApplyChangesFailed事件的任何消息吗?或者它根本没有下载任何更改?是的,对不起,我应该提到这一点。下载总是启动ApplyChanges,但LocalUpdateRemoteUpdate或LocalInsertRemoteInsert失败。我不明白的是客户根本不碰这些桌子。有一件事可能会指出这个问题,那就是有一个ModifiedOn(datetime)字段,但最近才引入代码来更新这个字段。数据库未将其用作行版本,但可能存在我在架构中未正确配置的内容。唯一的不同之处是,同步每30分钟运行一次,并且一些更改应用于阈值,这意味着我可以在一小时内计算17次更新,但某些客户端会触及14+3,一些16+1,等等,只要我最终得到了结果,我就很高兴。我敢打赌,这可能与服务器上的时间有关。