2012-03-06 58 views
2

我目前正在寻找使用Microsoft Sync Framework(2.1)来同步客户端(运行SQL Server Express)与基于云的中央数据存储,使用WCF进行所有通信。通过WCF无会话同步框架

中央数据存储是一个SQL数据库,连接了可扩展数量的处理节点,每个处理节点都有一个用于处理同步调用的WCF服务实例。

同步时可能会有大量数据从服务器传输到客户端,所以我认为批处理是避免内存不足问题,更好地处理不可靠连接等所必需的。我的问题是N层我见过的例子似乎需要WCF服务端的PerSession的实例化模式,并且批处理文件存储在磁盘上的某个位置,这不是一个选项,因为不能保证后续调用将进入同一个处理节点,所以我的WCF服务都设置为PerCall实例化。

我解决这个配料问题的最佳方法是什么?有没有办法将批处理存储在中央数据存储中(比如我的服务器数据库),还是有替代批处理的方法来将数据集的大小减小到“更小”的数据传输将更加稳健?

+0

我也许应该补充的是,客户端将彼此太被同步,所以这将是一个合作的情况,所以从我读过,我应该使用SyncOrchestrator和KnowledgeSyncProvider(或继承的子女)。如果有任何帮助,[this](http://code.msdn.microsoft.com/Database-SyncSQL-Server-e97d1208)示例似乎展示了我想要的大部分内容,除了PerSession实例。 – 2012-03-06 17:24:10

+0

是SQL Azure上的云存储吗? – JuneT 2012-03-07 05:53:00

+0

不,它不在Azure上运行,但本质上我们的基础结构与Azure提供的VM角色相同。每个节点都是可以处理调用的机器映像,并且我们可以随时添加或删除任意节点,要求所有内容都是无状态的。 – 2012-03-07 09:40:38

回答

1

Sync Framework中的批处理仅用于传输更改,而不是应用程序的更改。所以如果您有一个同步会话的更改批量分成10个批次,则不会单独应用一个批次。相反,整个10个批次是作为一个应用的。在内部,批次实际上是重建为数据集的字节数组。所以您不能在一个节点中拥有批处理的一部分,而在其他节点上不能拥有其他部分。

不确定它是否有帮助,但Windows Azure同步服务示例可能会为您提供一些有关如何存储批处理文件和编写类似服务以及处理批处理的模式。

看看Walkthrough of Windows Azure Sync Service Sample

+0

好的,谢谢我看了一下,我认为这对我的情况没有帮助。我现在正在尝试使WCF服务成为一个持久服务,并将状态存储在一个集中式数据库中,以便会话中的后续调用使用同一个对象,而不管节点。然而这证明是棘手的,因为它似乎没有正确序列化/反序列化SqlSyncProvider,并且在尝试使用它时收到DbMissingCommandExceptions。 – 2012-03-08 11:43:35

+0

我提到的示例实际上是将批处理存储在Blob存储中,并有另一个应用更改的工作人员...其他同步框架wcf示例也使用文件系统存储批处理文件,是否可以不只是更改此示例将批处理文件存储在数据库中? – JuneT 2012-03-08 16:23:43

+0

对不起,我可能应该进入Azure示例多一点。在稍微玩一会之后,我发现将批量写入/读取到数据库是相对直接的,但不幸的是,我不得不放弃在服务器端不能正确维护同步期间的状态(BeginSession和EndSession)。我想我和DurableService很接近,但我无法让SqlSyncProvider完全序列化。我们现在只是使用支持粘性会话的负载均衡器,因为我们现在可以将批量分配到磁盘,所以批量分配到数据库冗余!不管怎么说,还是要谢谢你 – 2012-03-09 10:54:28