如何在不使用deprovision的情况下使用Sync Framework中的动态过滤器?

时间:2014-10-23 08:55:12

标签: c# wpf wcf azure microsoft-sync-framework

我的 N层同步框架应用程序在Azure上托管了WCF服务,运行小型WPF客户端的客户端。这些客户端使用WCF服务将其本地SQL Server Express数据库与Azure上的SQL数据库同步。因此,从WPF应用程序,SyncOrchestrator通过代理使用 SqlSyncProvider (LocalProvider)和 RelationalProviderProxy (RemoteProvider)。使用Microsoft的SyncSvcUtilUI在服务器上手动完成配置,并在运行时应用于客户端。 它就像一个魅力

但现在我需要添加过滤器。因此,客户可以选择他们想要同步的客户。他们有一个简单的下拉菜单来选择客户的位置(让我们说只有来自纽约的客户),然后我会应用这些过滤器和同步。这就是我现在正在做的事情:

  1. 我已经更改了服务器的配置。我使用一些动态过滤器手动创建了一个范围模板。例如,Customers表有一个side.location = @location过滤子句。这是手动配置的。
  2. 当客户选择过滤器并点击“同步”时,它会从服务器获取范围模板,应用过滤器值并创建新范围。
  3. 然后执行取消配置服务器及其自身(客户端)之前应用新范围。
  4. 最后,客户端在服务器和客户端上应用这个具有过滤器值的新范围。
  5. 然后它同步。
  6. 每个同步请求都会发生此过程!
  7. 问题? 我在同步之前执行取消配置客户端和服务器的时间,丢失跟踪并一次又一次地发送所有数据。这就是我的问题。我无法相信没有别的办法。或者我错过了什么?我需要使用过滤器,它们需要是动态的。

    如果有人有关于更好的方法的一些提示,我会非常感激(我的全部耳朵):)

    谢谢!

1 个答案:

答案 0 :(得分:1)

不支持同步Fx中的动态过滤(分区重新排列或进出范围的行)。

建议的方法是取消配置并重新初始化客户端。

您可以尝试重写同步提供程序并自行构建过滤器查询(请参阅方法here以覆盖查询)。

在范围内添加一行(该行符合过滤条件)很容易。但你必须单独处理超出范围的行(该行已同步到客户端,但过滤条件已被修改,因此行不应该在客户端)