C#のWebApiでJsonデータを返却する際に、まとめてではなく何回かに分割して返却したいのですが可能でしょうか?
今はHttpClientのSendAsyncを使ってクライアントから送られてきた検索条件をもとにデータを取得し、1000件であれば1000件まとめて返しています。
可能であれば100件ずつとか返却し、クライアント側で進捗率みたいなものを表示できればと考えています。
[HttpPost] [ActionName("json")] public HttpResponseMessage GetJson([FromBody]string condition) { //データ取得処理 return Request.CreateResponse(System.Net.HttpStatusCode.OK, "ここに入るデータを何回かに分割して返却したい"); }
以下、開発環境
Visualstudio2013
.netFrameWork:4.7.2
ASP.NET Web API の話なら ASP.NET のタグを付けてください。分割するのはどういう理由ですか? チャンク形式でエンコーディングしてブラウザにダウンロードするという話とは違いますか?
タグを追加しました。
分割する理由ですが、質問にも書かせて頂いたとおりクライアント側で進捗率を表示させたいからです。
クライアント側はWindowsFormでJsonで取得したデータをグリッドビューに表示させています。
HTTP 通信ですから、クライアント側から定期的に Web サーバーに要求をかけて進捗情報を入手するということになると思いますが、サーバー側でそういう情報を提供する仕組みは作れるのでしょうか?
そういうことをしたいというのは、応答が返ってくるまでに時間がかかるからであろうと想像していますが、どこで時間がかかっているのでしょう? それによってどうすべきかの話が変わってくると思うのですが。
サーバー側でそういう情報を提供する仕組みは作れるのでしょうか?
⇒
そこをどう作ればいいのか今悩んでいます。
HTTP通信の事はあまり詳しくないのですが、クライアントから1回のリクエストに対してサーバー側でデータを複数回に分割して簡単に送信する仕組み(関数?)とかあるのかなぁと思いました。
応答が返ってくるまでに時間がかかるからであろうと想像していますが、どこで時間がかかっているのでしょう?
⇒
今はデータが少ないので実際に時間はかかっていないのですが、今後データが増えたときに通信中のアニメーションだけではなく進捗率も欲しいと考えています。
時間がかかるとしたら、クライアント側で言うとSendAsyncでリクエストを投げてから返ってくるところでしょうか?
HttpResponseMessage response = await client.SendAsync(request);
> クライアントから1回のリクエストに対してサーバー側でデータを複数回に分割して簡単に送信する仕組み(関数?)とかあるのかなぁと思いました。
そういうのは、自分が知る限りですが、チャンク形式にする以外はないと思いますが、これは質問者さんのやりたいこととは違うようです。チャンク形式とはどういうことかは以下の記事を見てください。
http://surferonwww.info/BlogEngine/post/2016/12/14/downloading-file-by-using-chunked-encoding.aspx
> 時間がかかるとしたら、クライアント側で言うとSendAsyncでリクエストを投げてから返ってくるところでしょうか?
そこは第三者には分からないですが、仮にそうだとすると、Web サーバーが応答を受け取って DB サーバーにクエリを投げて、DB サーバーからデータが入手できて、それを Web アプリで JSON 形式に加工するまでの時間ということになりますよね。
でも、そのプロセス全体にかかる時間と現在の進捗が分かるかと言われると、どうやったらいいのかは自分は見当がつきません。
何にせよ、質問者さん自身もどこで時間がかかりそうか現在のところ分からないようですが、そうだとすると適切な答えは見つからないと思います。
最終的に DataGridView に応答を表示するということですが、ユーザーに 1,000 行も表示するのでしょうか? そうであっても 1,000 行ぐらいなら進捗を表示するまでもなく瞬時に応答が返ってくるのではないかと思うのですが、いかがですか。
わかりました。簡単には出来なさそうですねありがとうございます。m(__)m
回答1件
あなたの回答
tips
プレビュー