QA@IT

IEがIISの応答に対して待機中のまま処理されない(asp.net)

9911 PV

現在、asp.net mvc ver5.1 で新規Webアプリを開発しておりまして、表題の件で困っているところです。
ボタン押下でCSVがダウンロードできる機能があるのですが、
ブラウザが「待機中」となり、処理が進まなくなる場合があります。
環境と、試行したケースは下記です。

■環境
・クライアント:IE8(OSはWin7)
・サーバー:IIS8.5

■試行したケース
・レコード数10件のcsvダウンロード 成功(レスポンスまで20秒程度)
・レコード数10000件のcsvダウンロード 成功(レスポンスまで9分程度)
・レコード数12000件以上のcsvダウンロード 失敗(レスポンスまで11分程度)

処理件数が多いせい(=データのサイズ)かな?と思い、切り分けのためreturn Viewの直前で
10分間sleepを入れて下記を行ってみましたが、

・レコード数10件のcsvダウンロード 失敗

となりました。

どうやら処理時間が10分を越えたあたりで、待機中となるということがわかったのですが、
それを管理する閾値的なものがどこにあるのかがわかりません。

ちなみにデバッグ実行したところ、どのケースにおいてもちゃんとAPサーバー上は正常終了していることが確認できています。

もし何かご存知でしたら、ご教授いただければ幸いです。
よろしくお願いいたします。

回答

ファイルのダウンロードの制限の問題でよく聞くのはサイズで、時間というのは自分は聞いた事がないのですが・・・

サイズについては、HttpResponse.WriteFile を使うとメモリにバッファリングされるので Web サーバーのメモリの制約の関係でサイズの大きなファイルはダウンロードに失敗する・・・という問題をよく聞きます。

それを解決するために、HttpResponse.WriteFile に代えて HttpResponse.TransmitFile メソッドを使うという解決方法が用意されています。

質問者さんがどのようなコードを書いたのか分かりませんが(できれば、質問の際に書いてくださいね)、上記のあたりがはっきりしないのであれば、以下のページを参考にカスタム ActionResult 派生クラスを作って試してみてはいかがですか?(以下のページのコードでは HttpResponse.TransmitFile メソッドを使っています)

Writing A Custom File Download Action Result For ASP.NET MVC
http://haacked.com/archive/2008/05/10/writing-a-custom-file-download-action-result-for-asp.net-mvc.aspx/

ASP.NET MVC で定義されている ActionResult の派生クラスの FilePathResult クラスも同等な機能を提供しているそうですが、自分は試したことがないので自信はないです。

【追伸】

ダウンロードとは直接関係ないのですが executionTimeout の設定に引っかかっているのかもしれません。こちらもチェックしてみてください。

httpRuntime 要素 (ASP.NET 設定スキーマ)
http://msdn.microsoft.com/ja-jp/library/vstudio/e1f13641(v=vs.100).aspx

編集 履歴 (2)
  • SurferOnWww さん
    早々に回答ありがとうございます!
    そして、コメント遅くなってしまってすみません。
    ご指摘いただいた点については回答もらってすぐに確認しましたが、私の直面してる事象には該当しないようでした。
    -

その後、正式ルートで例の専門家集団の会社へ問い合わせたところ、下記の類似報告があるとのことでした。

[類似事例]
Win7+IE8では、WebストレージAPI(localstorage)を使用しているWebページにアクセスした後に
ファイルのダウンロード操作を行うと、10分を超えた場合に処理が進まない事象が発生する。

というわけで、それが原因かどうか切り分けるため、下記レジストリキーを登録してIE8の
Webストレージ機能を無効化してみました。

キー:HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_DOMSTORAGE
名前:iexplore.exe
種類:REG_DWORD
値:0

すると、問題の事象は再現しませんでした!
というわけで、IE8のバグのようです。

ちなみにこうした原因による本事象は下記のIEバージョンでは発生しないそうです。
・MS13-080 以降のセキュリティ更新プログラムを適用したIE9
・IE10 以降(←IE11で検証しましたが、確かに問題の事象起こらずでした。)

現実的な対応策としては、
アプリ側ではどうすることもできないし、かといって各拠点の全端末のレジストリをいじるわけにもいきませんし。。。
と思っていたら、IE8は2016年1月でMSのサポート切れを迎えるということで、IE11へのバージョンアップを
年内に行う予定があるみたいで、それまでは事象発生のつど個別対応ということになりそうです。

SurferOnWwwさん
迅速な対応感謝いたします。
またなにかありましたら、その時はよろしくお願いします。

編集 履歴 (0)
  • 情報提供をありがとうございました。勉強になります。 -
ウォッチ

この質問への回答やコメントをメールでお知らせします。