2012-03-06 2 views
2

現在、Microsoft Sync Framework(2.1)を使用して、すべての通信にWCFを使用してクラウドベースの中央データストアとクライアント(SQL Server Expressを実行)を同期させようとしています。セッションなしのWCFによる同期フレームワーク

セントラルデータストアはSQLデータベースで、スケーラブルな数の処理ノードが接続されており、それぞれに同期呼び出しを処理するWCFサービスのインスタンスがあります。

同期時にサーバからクライアントに大量のデータが転送される可能性があるため、メモリの問題を回避し、信頼性の低い接続などを処理するためにはバッチ処理が必要だと思います。私の問題は、私が見た例では、WCFサービスの終了時にPerSessionのインスタンス化モードが必要なようで、バッチファイルはディスク上の場所に格納されています。これはオプションではないため、後続の呼び出しは同じ処理ノードので、私のWCFサービスはすべてPerCallインスタンス化に設定されています。

私がこのバッチ処理の問題に取り組む最も良い方法は何ですか?バッチを中央データストア(私のサーバーデータベース)に保存する方法はありますか、またはより堅牢になるようなデータセットのサイズを小さくするバッチ処理の代替方法がありますか?

+0

を見てまたは継承された子ども)。そしてもしそれが助けであれば、[This](http://code.msdn.microsoft.com/Database-SyncSQL-Server-e97d1208)サンプルは、PerSessionのインスタンス化とは別に、私が望むもののほとんどを示すようです。 –

+0

はSQL Azureのクラウドストアですか? – JuneT

+0

いいえ、それはAzureでは実行されていませんが、基本的に私たちのインフラストラクチャは、Azureが提供するVMのロールと同じです。各ノードはコールを処理できるマシンイメージであり、いつでもノードを任意に追加または削除することができ、すべてがステートレスであることが必要です。 –

答えて

1

シンクフレームワークでのバッチ処理は、変更の適用ではなく、変更の適用に対するものです。変更が10バッチにバッチされる同期セッションがある場合、1つのバッチは個別に適用されません。むしろ、10バッチ全体が1つとして適用されます。内部的には、バッチは実際にはデータセットに再構成されたバイト配列です。あるノードではバッチの一部を持ち、他のノードではバッチの一部を持つことはできません。

Windows Azure Sync Serviceのサンプルでは、​​バッチファイルの保存と同様のサービスの作成とバッチ処理の方法に関するいくつかのパターンが提供される場合があります。

は(それは協調的なシナリオになりますので、私はおそらく私は何を読んでから、私はSyncOrchestratorとKnowledgeSyncProviderを使用する必要があり、クライアントがあまりにも相互に同期されることを追加する必要がありますWalkthrough of Windows Azure Sync Service Sample

+0

ありがとう、私は一見を持っているし、私はそれが私のシナリオで役立つとは思わない。私は今WCFサービスを永続的なサービスにして、セッション内の後続の呼び出しがノードにかかわらず同じオブジェクトを使用するように集中データベースに状態を保存しようとしています。しかし、SqlSyncProviderを適切にシリアライズ/デシリアライズしていないようで、使用しようとしたときにDbMissingCommandExceptionsを取得しているので、これは難しいことです。 –

+0

私が参照しているサンプルは、実際にはブロブストレージにバッチを保存していて、変更を適用する別のワーカーを持っています...他の同期フレームワークwcfサンプルもファイルシステムを使用してバッチファイルを保存していますバッチファイルをデータベースに保存するには? – JuneT

+0

ええ、すみません、もう少しAzureサンプルを用意する必要があります。ちょっと遊んだ後、DBにバッチを書き込み/読み込むのは比較的簡単だとわかりましたが、残念ながら同期の間、サーバーの側で状態を正しく維持することができなくなった後は、あきらめてしまいました(BeginSessionおよびEndSession)。私はDurableServiceに近いと思いますが、SqlSyncProviderを完全にシリアル化することができませんでした。現在、スティッキセッションをサポートするロードバランサを使用しており、バッチ処理をDBに冗長化し、ディスクにバッチ処理できるようになりました!とにかくありがとう –

関連する問題