Web ページの 1 つに、完全にサーバー上で実行される非常に長いsubmit()
タイプの関数があり、進行状況を示すためにクライアントに進行状況バーを表示したいと考えています。
20%
何かを見せることができる限り、間隔をあけて更新しても問題ありません。
これは可能ですか?多分ある種の制御runat="server"
?私はここでアイデアを失いました。
Web ページの 1 つに、完全にサーバー上で実行される非常に長いsubmit()
タイプの関数があり、進行状況を示すためにクライアントに進行状況バーを表示したいと考えています。
20%
何かを見せることができる限り、間隔をあけて更新しても問題ありません。
これは可能ですか?多分ある種の制御runat="server"
?私はここでアイデアを失いました。
可能ですが、Web ベースの環境で行うのは、たとえばデスクトップ ベースの環境よりもかなり困難です。
あなたがしなければならないことは、リクエストをサーバーに送信し、サーバーに非同期タスクを開始させてから、クライアントに応答を返すことです。その後、クライアントは更新のために定期的にサーバーをポーリングする必要があります (おそらく/理想的には AJAX を使用)。サーバーは、長時間実行されるタスクの本体内で、クライアントのポーリング メソッドによってアクセスできるセッション値を設定する (または状態を格納する他の方法を使用する) 必要があります。
これは厄介で、面倒で、非効率的であるため、これを実行するユーザーが多数いる場合は、これを実行したくないでしょう。
Microsoft による実装例を次に示します。この例ではUpdatePanel
、オブジェクト、ASP タイマーなどを使用しているため、コードの記述がかなり簡単になりますが (それでも、それほどきれいではありません)、これらのコンポーネントはかなり「重い」ことに注意してください。明示的な AJAX 呼び出しを使用したり、完全なポストバックを実行するのではなく Web メソッドを作成したりすると、パフォーマンスが大幅に向上します。私が言ったように、最高の場合でも、それはパフォーマンスの悪夢です. 多くのユーザーがいる場合、またはこれが非常に頻繁に実行される操作である場合は、これを行わないでください。ごく一部の管理者ユーザーがたまにしか使用しない場合は、問題にならない可能性があり、ユーザーの観点からは多くのことが追加されます。
.net 4.5 の async と await を見てみましょう。
ASP.NET MVC 4 での非同期メソッドの使用-- (申し訳ありませんが、MVC の例)