1

私は、WCF サーバー アプリケーションが異なるソースからのデータを 1 つのデータ モデルに集約し、クライアントと同期する共有状態アプリケーションを構築しています。各クライアントにモデルの初期スナップショットを提供し、モデル内の各モデル プロパティとしてデルタを送信します。その結果、状態はすべてのクライアントで共有されます。

モデルは揮発性であるため、各デルタはデータ モデル プロパティのディープ コピーである必要があり、ネストされたプロパティを持つ複雑なオブジェクトを含めることができます。プロパティが変更されるとすぐに、コピーが作成され、クライアント キュー ハンドラに渡されます。コピーである必要があります。シリアル化プロセス中に変更される可能性があるため、プロパティへの参照を渡すことはできません。デルタが各クライアントに渡されている間にモデルをロックすることは望ましくありません。コピーが作成されたらすぐにアプリケーションのメイン スレッドを解放したい。

私の質問は、最も効果的な方法でディープ コピーと WCF ワイヤ シリアル化を組み合わせる方法です。各デルタのディープ コピーを作成する迅速かつ安価な方法は、DataContractSerializerを使用することです。クラス。これは通常、WCF のシリアル化で使用されるため、クライアントへのトランスポート用にデルタをシリアル化する時間を節約できるように思われます。おそらく、1 つの操作で両方を行う方法があります。そこで、デュプレックス コールバック インターフェイスで特定の OperationContract メソッドのシリアル化を一時停止する方法を探しています。実際には、バインディングに「この OperationContract メソッドのパラメーター値をシリアル化しないでください。DataContractSerializer を使用して既にシリアル化されています。そのままクライアントに渡してください」と伝える方法を探しています。私は Silverlight クライアントを使用しているため、使用しているバインディングは PollingDuplexHttpBinding です。

4

0 に答える 0