如何在同步框架中使用动态筛选器而不使用取消设置
本文关键字:取消 设置 筛选 动态 框架 同步 | 更新日期: 2023-09-27 18:27:42
我有一个N层同步框架应用程序,它有一个托管在Azure上的WCF服务和运行小型WPF客户端的客户端。这些客户端使用WCF服务将其本地SQL Server Express数据库与Azure上的SQL数据库同步。因此,在WPF应用程序中,SyncOrchestrator通过代理使用SqlSyncProvider(LocalProvider)和RelationalProviderProxy。设置是使用Microsoft的SyncSvcUtilUI在服务器上手动完成的,并在运行时应用于客户端它就像一个符咒!
但现在我需要添加过滤器。因此,客户可以选择他们想要同步的客户。他们有一个简单的下拉列表来选择客户端的位置(假设只有来自纽约的客户端),然后我会应用这些过滤器和同步。这就是我现在正在做的:
- 我已经更改了服务器的配置。我已经使用一些动态过滤器手动创建了一个范围模板。例如,Customers表有一个side.location=@locationfilter子句。这是手动设置的
- 当客户端选择筛选器并点击"同步"时,它会从服务器获取作用域模板,应用筛选器值并创建一个新作用域
- 然后,它执行服务器及其自身(客户端)的取消设置BEFORE应用新作用域
- 最后,客户端应用这个在服务器和客户端上都具有筛选值的新作用域
- 然后它会同步
- 每个同步请求都会发生此过程
问题是什么在同步、丢失跟踪和一次又一次地发送所有数据之前,我每次都必须执行客户端和服务器的取消设置。这就是我的问题。我不敢相信没有其他办法。还是我错过了什么?我需要使用过滤器,它们需要是动态的。
请,如果有人有一些关于更好的方法的建议,我真的很感激(我洗耳恭听):)
谢谢!!
Sync Fx中不支持动态过滤(分区重新排列或进出范围的行)。
建议的方法是取消设置并重新初始化客户端。
您可以尝试重写同步提供程序并自己构建筛选查询(请参阅此处的重写查询方法)。
将一行放入范围(该行符合筛选条件)很容易。但是您将不得不单独处理超出范围的行(该行已与客户端同步,但已修改了筛选条件,因此该行不应在客户端)