2012-03-06 116 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