私は以前に多くのステップを踏んでいると確信していますが、この1つの問題を解決できないようです. 目標は、リアルタイム プログレス バー (潜在的に複数のファイル) を持つ ASP.NET 2.0 サイト用のファイル アップロード ページを作成することです。
私はすでにソリューションのほとんどの部分を実装してテストしました。しかし、愚かなことに、私はそれをすべて一緒に機能させることができないようです.
関連するリクエストに対して PreRequestHandlerExecute イベント (元々は BeginRequest を使用していましたが、Session へのアクセスが必要でした) を処理するカスタム HttpModule を作成し、HttpWorkerRequest オブジェクトを使用して受信フォームの投稿データをチャンクで解析します。リアルタイムの進行状況はセッションに保存されます。
セッションから抽出した進行状況情報を使用して jQuery 要求に JSON を返す ScriptMethod を提供する同じアプリケーションで Web サービスを構築しました。これをテストし、動作します。
私の問題は、(1) の処理中に (2) の ScriptMethod の jQuery ポーリングを実行できなかったことです。 jQuery 呼び出しはどこかでキューに入っているように見え、アップロードが完全に送信されるとすぐに、すべてが「100%」で突然返されます。したがって、非同期部分は機能していません。
私が試したこと:
- .ajaxForm() (jQuery Forms プラグイン) を使用してファイル アップロード ポストを送信します。
- IFRAME を使用したネストのさまざまなシナリオ。
- 最初のページからアップロードを送信している間、別のページ (別のブラウザー タブ) でポーリング jQuery を実行します。ポーリングは停止し、最初のページが完了するまでキューに入れられます。
他の人がうまくいったと主張する他の非常によく似たソリューションをオンラインで見たので、それは可能であるに違いありません。
アップデート:
問題は解決され、すべてが機能するようになりました。SessionState ロックに関する以下の私自身の回答を参照してください。