2017-11-21 18 views
-5

私は取っているアプローチで助けが必要です。このシナリオではSignalRを使用できますか?

私はこのシナリオで、私のMVCアプリケーションの1つでDataReaderを使用してデータベースからデータを取得しています。エンドポイント(つまりWeb APIコントローラ)では、IEnumerable<>タイプのデータを返しています。

私はforeach()を使用して、IEnumerableから一度に1行を読み取り、SignalRを使用してクライアントにデータを返します。したがって、クライアントはサーバー側でメソッドを呼び出し、サーバーは連続してデータをストリーミングします(行ごとに)。

私は一度に1行ではなく、チャンクでデータを返すようにしました。foreachループを修正して一度に 'n'個の行を返すように管理しましたが(今度はn個の行を一度に送信します)それらはデータがなくなるまで継続して接続を閉じます。

私がチャンクでデータを送信する理由は、UI(角)でページにデータを表示するためです。

ここで私の質問は、最初の10行を送信してからクライアントが次のページをクリックするのを待って、11から20行目の送信をやり直すなど、オンデマンドでSignalRコールを行うことができます。私は各クライアント呼び出しのデータベース呼び出しを回避しようとしているので、ループは以前の場所から開始する必要があります。

私はクライアントに特定のページ(ページの後のページ)にジャンプするオプションを与えていません。

また、前のページの状態を維持できるかどうかを知りたいので、クライアントが前のページに移動したい場合は、 (私は避けようとしているどこかのメモリにデータを保存しなければ、それは可能ではないと思います)。

このシナリオでは、SignalRを使用できるかどうか教えてください。そうでない場合、これにはどのような良いアプローチがありますか?

私はSignalRの新人です。私もC#の初心者ですので、どうか簡単に進んでください。

さらに詳しい説明が必要な場合はお知らせください。

+0

申し訳ありません。あなたの質問は、単純な方法で答えるには広すぎます。それを言い換えて、「私はこれを問題に言及すべきだった」のようなコメントを避けてください。すでに試した簡単なサンプルを見るのもいいでしょう。 –

答えて

-1

"このようにSignalRを使用すべきですか?"

あなたの問題は本当にSignalRの問題ではありません。 apiにページネーションを追加し、単一のリクエストでクエリを作成し、必要なものを取得してそのデータをクライアントに返すことができます。

ここで、ユーザーがクリックして、それがリクエスト(プル)である場合、SignalR(プッシュ)の必要はありません。

これは、SignalRの最もスケーラブルな用途ではありません。

+0

データをデータベースレベルで制限することはできません。私はこれを問題に言及すべきだった。だから私はそれが呼び出しごとにn行を取得するように実行時にクエリを変更することはできません。 – MycrowSoft

関連する問題