4

ASP.NET / C# で簡単な Web ページを作成しています。現在、データを完全にレンダリングするには、バックグラウンド スレッドで実行されるコード ブロックを呼び出す必要があり、完了までに数分かかることがあります。私はそれを(ページ宣言で async 属性を使用して)実行し、完了したらhtmlで正常に返すようになりました。私がやりたいことは、何らかの「読み込みページ」ですぐに戻り、バックグラウンド作業が完了したときにそのページを更新できるようにすることです。現在、バックグラウンド作業が処理されている間、ページには何も表示されません。それを行うための最善の方法または賢い方法に関するアイデアは大歓迎です!

ありがとう、

ジーク

4

3 に答える 3

1

上に投稿されたコメントに同意します。

ただし、「プロセッサ」を ashx (ハンドラー) を使用して別のページとして実装します。これは、javascript から呼び出してポーリングするのが非常に簡単であり、プロセス要求イベントを応答ストリームにフィードするようにコーディングするだけです。

私のサイトで例を示したいと思いますが、私のホストは、サーバーで .net を更新する間、私のサイトを 1 週間停止することに決めました (私はこれに特に満足していないことが想像できます)。

基本的に、私の場合、次のデータに依存するページがあります。BBC、Google、Amazon、YouTube、その他のランダムなサイト。

ページがユーザーに返され、ページ上の個々のコントロールが ajax 呼び出しをサーバーに返します。

フィードバックされたデータが読み込まれるタグのデフォルトのコンテンツは、フラッシュまたはシルバーライトの読み込み円によく似た単純なアニメーション gif 画像です。

データが戻ってくると、gif はサーバーから供給されたコンテンツに置き換えられます。

これは、クライアントが「ロード」を認識し、サーバーがクライアントが必要とするすべての処理でビジーであることを意味します (その観点からは同期的に見える)。

これはクリーンなユーザー エクスペリエンスであり、コードは非常にシンプルです。

Silverlight を使用してファイルをアップロードする方法を調べているときに、このアイデアにつまずきました。

基本コンセプト:

  1. 「ashx」へのajax呼び出し。(おそらく10行のjavascript)
  2. サーバーはリクエストを処理します。(リクエストの複雑さ、クエリ文字列を使用して渡される変数によって異なります)
  3. 応答は、それ以外の場合は完全なページに 1 つの要素を取り込みます。(ajax コールバックがこれを行います)

お役に立てれば :)

于 2010-05-17T14:10:18.190 に答える
0

必要なのは、HTTPサーバープッシュまたはHTTPストリーミングまたはロングポーリングと呼ばれるものです。それがどのように行われるかに応じて。

Webには多くの例があり、問題を詳細に説明する記事もあります。私はそれらを研究することから始めます。

HTTPストリーミングでこのSOの質問を確認することもできます...

「HTTPストリーミング」(プッシュ)AJAXパターンのクロスブラウザー実装

そこに素晴らしい紹介記事へのリンクがあります。

またはこれはロングポーリングの例です

基本的な「ロングポーリング」を実装するにはどうすればよいですか?

また

https://stackoverflow.com/questions/tagged/long-polling

お役に立てれば。

于 2010-05-13T22:12:03.050 に答える
0

Ajaxを使用して説明した内容を実装する方法はたくさんありますが、非常にシンプルに保ちたい場合は、長時間実行されるタスクを開始する前にFlush()、いくつかの読み込み画面で応答することができます。

<div>
    Loading..
    <% Response.Flush(); %>
    <% System.Threading.Thread.Sleep(5000); %>
    Done!
</div>
于 2010-05-13T22:07:54.497 に答える