Sync Framework 2.1更新和;删除似乎不适用

时间:2012-04-17 15:11:27

标签: wcf microsoft-sync-framework

我正在使用SyncOrchestrator将SQL Server 2008与~6个SQL Server 2008 Express客户端(我相信的所有内容)同步,或者使用http://code.msdn.microsoft.com/windowsdesktop/Database-SyncSQL-Server-e97d1208作为基础稍作修改。据我所知,这意味着所有连接都是对等或节点。

我有两个范围。一个是仅下载,另一个是仅上载。仅下载范围与身份列相关,主要是因为我不知道更好,仍然无法在客户端将Guids作为PK引入。它并不完全重要,因为所有客户端都应该有大约8个左右表的精确复制品,这些机器不会以任何方式接触这些数据,只能读取它。

仅上载范围使用Guids,幸运的是我可以控制数据库的那一部分,并且所有使用相同身份种子的10个客户端都无法正确地同步回服务器。两个范围都使用带有批量插入的默认配置和整个9码,所以我不应该在配置端做任何事情来搞砸它。

我最初设置的不是使用PerformPostRestoreFixup而且初始数据库将与来自主机的insert语句手动同步。这似乎很好,但似乎没有应用任何更新或删除。您可以放心地忽略这一点(仅用于历史准确性并证明我的无能),然后我使用VS2010数据库项目将数据库重建为仅架构和&同步。然后我使用了此处列出的步骤(http://social.microsoft.com/Forums/br/syncdevdiscussions/thread/9ac6d1a1-1565-4b82-a8d8-3d4a9ff5d07b)(同步,备份,恢复,调用performpostrestorefixup,同步x客户端) )并且在我设置所有这些的开发盒上,我可以看到更新和删除就好了。当我将它部署到x客户端时,我认为我没有看到数据库的镜像。

初始同步会抱怨并尝试再次同步所有记录。我相信这是预料之中的。在客户端上的ApplyChangeFailed事件期间,我将除DbConflictType.ErrorsOccurred之外的所有内容设置为ApplyAction.RetryWithForceWrite。这可能是问题的根源,因为我最初认为应该这样做以强制改变到客户端。我希望服务器在这种情况下始终获胜,但在跟踪期间,我总是在批量插入/更新调用期间看到短语“本地获胜”。我可能会在重新申请之前看到错误,但看起来很尴尬。

我似乎唯一的问题是仅下载范围。初始客户端数据库现在大约一周了,如果我使用performpostrestorefixup步骤,我看不到现在和之后应用的任何更新,因为我认为应该。就好像SyncFx几乎更喜欢客户端上的空白数据库来启动初始同步,然后所有更新似乎都适用,没有启动ApplyChangesFailed事件。

如果有人以前见过这个或者有线索去哪,我会非常感激。我的脑子已经油炸,试图确定它是怎么回事。我最后的努力是将空白​​数据库部署到所有客户端并让他们开始同步。我在开发方面没有遇到任何问题,但我只能测试另一个客户,知道这是否会有所不同。除此之外,我不知道该做什么,除了继续做手动同步,这将完全打败这个目的。我认为PerformPostRestoreFixup可以完全缓解这个问题,但无论是否存在相同的问题,或者我可能不会看到我需要的问题。

由于

1 个答案:

答案 0 :(得分:1)

我想用我的发现报告并关闭该条目。

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

“[05:30:41 PM] - ApplyChange Failed:TableName :, Stage:ApplyingInserts,ConflictType:LocalInsertRemoteInsert,Action:RetryWithForceWrite”

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

一旦我使用完全空白的数据库启动每个客户端并在本地配置,所有这些错误都消失了。就好像每个客户端只需要设置一些唯一ID。我也使用x64版本而不是x86,这可能对结果有一定影响或没有影响。我希望我能确定究竟发生了什么,但似乎有疑问时,无论何时可能,从绝对零开始,让同步填写数据是最安全的选择。