使用WCF代理的N-Tier上的Sync Framework v.2.1和SQL Express上的更改跟踪

时间:2011-08-14 15:21:56

标签: c# sql-server-2008 sql-server-express microsoft-sync-framework

我很高兴在应用程序上使用SyncFx v.2.1。客户端目前使用SQLCE,服务器端使用Server 2008 r2。我正在使用SyncFx代理并在WCF服务中托管服务器SyncAdapterBuilder代码。客户端有SyncAgent和SyncTables,它工作正常。我使用集成的SQL更改跟踪代替耦合(也称为自定义/范围)更改跟踪,因为我不允许修改现有模式。

所以我的问题是系统的要求已经改变,我需要在客户端上使用SQL Express来支持存储过程。

为什么不合并复制?这些要求还禁止修改架构或使用触发器。实际上,在迁移到SyncQx for SQLCE之前,应用程序的原始版本使用了与SQLCE的合并复制。

那怎么办?我已经阅读了很多相互矛盾的信息,我只能假设这是对不断发展的SyncFx版本的回应。没有直接的例子说明如何在两者上实现SQL to SQL Express和Change Tracking。另外,我试图从功能性SQLCE实现过渡到Express,尽可能少的更改。客户端已经能够使用任何类型的DB,它只是当前需要更改的同步过程。

这是我发现的,但没有成功。我已经阅读了有关此问题的每个StackOverflow响应,但仍然没有找到实现此方法的方法。

  1. Database Sync:SQL Server and SQL Express N-Tier with WCF:此MS示例适用于SyncOrchistrator,但提供了侧跟踪表和触发器。我无法通过在客户端和服务器上使用更改跟踪的方式对其进行修改。
  2. Sync framework with SQL Server 2008 Change Tracking:StephaneT在此建议,仅使用SQL Express样本同步提供程序和SyncFx 2.0技术的常规SQLCE方法,只需要客户端表修改。不幸的是,这个示例SQL Express提供程序的所有链接似乎都被删除了,而来自JuneT甚至Liam Cavanagh的MSDN上的其他帖子建议继续使用新的官方SqlServerProvider而不是DbServerProvider的自定义版本。问题是这里没有任何样本实现,我无法通过反复试验来解决这个问题。
  3. Syncing SQL Server 2008 Databases over HTTP using WCF & Sync Framework:Raj提供了最好的例子(简单且易于翻译成SQLCE进程),遗憾的是它还使用了似乎已经从互联网上消失的SqlExpressClientSyncProvider。它还需要一个锚表来跟踪客户端,我想我可以逃脱,因为我不允许修改“现有”表上的模式。
  4. 所以那些可以帮助我的例子。基本上我想通过代理将现有功能的SQLCE SyncFx移植到集成的SQL更改跟踪,使用SyncAgent到适用于SQL Express的版本,而无需更改现有的scheama或使用触发器。我还应该提一下,我大量使用过滤器参数,因为复制中有150多个表,如果没有过滤器,它们会非常大。我读过一些引用说SqlExpressClientSyncProvider不支持过滤器,但我无法验证,因为我找不到对该代码仍然有用的引用。

    也许有一个使用SqlServerSyncProvider的Raj示例的刷新

    提前感谢任何能指出正确方向的人!

1 个答案:

答案 0 :(得分:2)

查看此链接,您可能仍会在评论区域中找到一些下载链接:http://www.8bit.rs/blog/2009/05/debugging-sql-express-client-sync-provider/

请注意,即使示例SqlExpressClientSyncProvider也使用触发器来跟踪逻辑删除表中的删除。同样,您需要在表中包含列以跟踪插入或更新行的时间(日期时间或时间戳列)。

关于过滤,您可以轻松修改适配器中的查询以包含过滤子句。

较新的SqlSyncProvider不支持Sql Change Tracking,因为它实现了自己的跟踪机制。较新的提供商在点对点场景中工作,因此它的跟踪以及来自哪个副本的特定更改来自。