0

クライアントへのコールバックを作成することでWCF二重化を使用するSilverlight4アプリケーションがあります。クライアントから、データベースからすべての行を取得するメソッドがあります(実際にはそうではありませんが、この例では)。各行は、コールバックを使用してクライアントに送信されます。開始したら、このプロセスを中止する方法を理解する必要があります。たとえば、このテーブルのすべての行が画面上でスクロールされているのを見るのにうんざりしているとします。別のテーブルの行を表示したい。途中で最初のアクションを停止するにはどうすればよいですか?

サーバー上に新しい操作を作成して処理を中止することもできると思いましたが、これは、コールバックを介してすでに送信され、クライアントによって取得されるのを待っているものには何の影響も及ぼしません。

新しい検索が開始されると、クライアントによって取得される古いデータがないことを保証する方法を探しています。誰かがこれを達成するための最良の方法について何か考えを持っていますか?

おかしいです。デュプレックスサービスを使用する前の私の問題は、データを十分な速度で取得できないことでした。デュプレックスを使用しているので、オフにできません。

4

1 に答える 1

1

これにアプローチするには2つの方法が考えられます。注意: どちらもテストしていません。間違いなく他にもあります。

(1) クライアント側またはサーバー側のいずれかで、接続を中止し、新しい接続を再確立します。一種のハックであり、経験から、この種の「今は見えるが今は見えない」関係をコーディングすることは PITA であると言えます。

(2) サーバー側では、最初に一定量のデータのみを送信し、クライアントから実際に次のビットを見たいという通知を受け取るまで、残りをキャッシュします。これは、多くの「ページング」UI で使用されるアプローチに似ています。これのバリエーションは、データではなく、クライアントへの呼び出しをキューに入れることです。それらをある種の Action 変数に入れ、それらをキューに入れ、クライアントが「はい、次の 50 をください」と言った場合にのみコールバックを実行します。

残念ながら、OperationContext に「保留中のすべての呼び出しを中止しますが、チャネルは維持します」と伝える方法はわかりません。あるのかもしれませんが、見つけられませんでした。より多くの知識と経験を持っている人が私を訂正してくれることを嬉しく思います。

于 2011-02-07T07:01:47.467 に答える