2011-08-09 10 views
1

SilverlightのDataGridが利用可能になると、そのデータをDataGridにロードしたいと考えています。このシナリオは次のとおりです。Silverlight/C# - WCFデータを動的にロードする最も良い方法は?

  1. 私のSilverlightクライアントは、サーバーへのWCF呼び出しを起動します。
  2. サーバーの応答に約1〜2秒かかります。
  3. 応答は1 MBから4 MB(かなり大きい)です。
  4. このデータはDataGridに読み込まれます。
  5. サーバーは迅速に応答しますが、1 MB〜4 MBがすべてダウンロードされるまで、ユーザーはデータを認識しません。

クライアントがダウンロードしているときにこのデータをDataGridにロードするには、どのような方法が最適です(または最も効率的ですか)。ダウンロードが完了するのを待つこととは対照的に?

+0

サービスによって返されるデータの形式は何ですか? –

+0

これはSOAPを使用するbasicHttpBindingです。 – twitchax

答えて

3

これを処理する方法は、カスタム仮想化を実装することです。

  • はIDのみ
  • はIDと負荷のみ可視オブジェクト(おそらくにさらにいくつかを取得idで

を単一のオブジェクトを返すWebサービスメソッドを追加返すWebサービスメソッドを追加しますスクロールを許可する) スクロールに必要なときに、より多くのオブジェクトを取得します。

+0

これは動作する可能性があります。しかし、実際には、スクロールに関係なくすべてのデータがロードされます。ダウンロードが始まるとすぐに、データがユーザーに表示されるようにしたいだけです。 – twitchax

+0

@twitchax、まだ検索されていないデータは表示できません。オブジェクトがフェッチされるたびに、私たちがグリッドにバインドしたコレクション/ ViewModelにオブジェクトを追加します。そうすれば、ロードされたときにすぐに表示されます。スクロールしなくてもダウンロードを続けることができます。 –

1

この問題は、私のコメントで取得しようとしていた(あなたは本当に戻り値のデータ型を指定していませんでした)、Ernoが実行可能な解決策をあなたに与えた点の一部です。 Webサービスは、送信している戻り値の型をシリアル化し、部分的な結果を提供しません。これは、グリッドとのインターフェースの問題ではなく、クライアントのWebサービスコールで「必要なデータを受け取り、処理を続行する」と表示されるときの問題です。

return MyMassiveDatatable; 

次に、あなたがするデータテーブル全体を待つ必要がしようとしている:たとえば、あなたは、あなたのサービスではない、レコードの4MBの価値があるとサーバー側のデータテーブルを収集している場合シリアル化され、ワイヤを介してポンピングされる。

彼のソリューションは、原子単位に転送を分割することでした。 I.最初に1つのWebサービスコールのレコードのIDを照会し、それらのIDを反復して、各IDのレコードを一度に1つずつ要求し、1つのレコードを戻したら、それをクライアントサイドテーブルに追加します。あなたがそれを取得すると、ディスプレイは各レコードを書き込みます。

関連する問題