【发布时间】:2011-05-20 22:05:32
【问题描述】:
我有一个跨 WCF 服务(IIS 托管)使用 Microsoft Sync Framework 2.0 来同步 SQL 2008 标准数据库(服务器)和 SQL CE 3.5(客户端)的过程。一切正常,直到一个用户开始收到 OutOfMemory 异常。事实证明,这个用户的数据集比任何其他用户都要大。
相关数据集有 800,000 行,从 SSMS 导出到 CSV 时的总大小为 174MB。大多数用户都在 20-30MB 范围内,效果很好。
我正在使用 DbServerSyncProvider 和 SqlCeClientSyncProvider。
我已经按照其他文章中的描述实现了批处理并发布了,但无济于事。据我了解, DbServerSyncProvider 中的批处理机制就是一次拉取多少个数据修订版。即使锚点差为 1,我仍然会产生相同大小的数据集。
我在我的服务上使用了 transferMode="Streamed",并且我在 IIS 中托管时应用了 Streamed 的修复程序。
我尝试将 maxReceivedMessageSize 提高,首先从 20MB 提高到 200MB,然后提高到 2GB,最后提高到 10GB,但均未成功。这是在服务器和客户端上完成的。
我的 WCF 跟踪日志显示 GetChanges 的执行,但从未在 Process 操作下记录任何内容。
我已阅读有关 SqlSyncProvider 以及它如何允许按内存大小进行批处理的信息。但是,我找不到有关通过 WCF 服务使用它的太多信息,在我尝试使用它重写我的客户端和服务器之前,我想检查一下我是否在某些事情上是个白痴,以及 SqlSyncProvider 是否可以解决我的问题,以及能够跨 WCF 服务传输。
提前谢谢...
【问题讨论】:
标签: wcf microsoft-sync-framework