現在オフラインです。再接続するためにインターネットの接続を待っています

[PRB] HtmlInputFile サーバー コントロールを使用するとサイズの大きなファイルをアップロードできない

この記事は、以前は次の ID で公開されていました: JP295626
現象
HtmlInputFile コントロールを使用してサイズの大きなファイルをアップロードしようとしたときに、そのファイルがアップロードされない場合があります。
原因
この問題は、Machine.config ファイルの <httpRuntime> セクションの maxRequestLength パラメータのデフォルト値が 4,096 (4 MB) になっているために発生します。そのため、デフォルトでは、この値よりもサイズの大きいファイルはアップロードされません。
解決方法
この問題を解決するには、以下のいずれかの方法を使用します。
  • Machine.config ファイルで、<httpRuntime> 構成セクションの maxRequestLength 属性を、デフォルト値よりも大きな値に変更します。この変更は、コンピュータ全体に影響します。
  • Web.config ファイルで、アプリケーションごとに maxRequestLength の値を上書きします。たとえば、Web.config に次のエントリがある場合、8 MB 以下のファイルをアップロードできます。
    <httpRuntime maxRequestLength="8192" />					
詳細
デフォルトでは、この値は、サービス拒否攻撃に対する防御策として 4 MB に制限されています。

Machine.config ファイルで maxRequestLength 属性が設定されている場合に、maxRequestLength の値を超える要求 (たとえば、ファイルのアップロード) が送信されると、カスタム エラー ページが表示されず、Microsoft Internet Explorer には "サーバーが見つからないか、DNS エラーです。" というエラー メッセージが表示されます。

理論的には、アップロードできる最大のファイル サイズはかなり大きいものです。しかし、ASP.NET の稼動状態の監視が原因で、ASP.NET では大きいサイズのファイルをアップロードできません。ASP.NET のワーカー プロセスには、2 GB の仮想アドレス空間がありますが、稼動状態の監視とメモリの断片化のため、ASP.NET のワーカー プロセスで使用するメモリは 1 GB を若干上回る程度です。

アップロード処理の際には、ASP.NET によってファイル全体がメモリに読み込まれるまで、ユーザーはファイルをディスクに保存することができません。そのため、Machine.config ファイル内の processModel タグの memoryLimit 属性によって、このプロセスはリサイクルされます。memoryLimit 属性では、ASP.NET ワーカー プロセスが自動的にリサイクルされる前に、ASP.NET ワーカー プロセスで消費できる物理メモリ量の割合を指定します。リサイクルを行うことで、ASP.NET のクラッシュや応答停止などを引き起こすメモリ リークを防止できます。

また、アップロード可能な最大ファイル サイズに影響を与える要因は他にもあります。これには、使用できるメモリ、ハード ディスクの空き領域、プロセッサの速度、および、現在のネットワーク トラフィックが含まれます。標準的なトラフィックでファイル アップロードが行われている場合、10 ~ 20 MB の範囲の最大ファイル サイズを使用することをお勧めします。ファイルのアップロードをまれにしか行わない場合は、最大ファイル サイズを 100 MB に設定することもできます。

: ASP.NET では 100 MB を超えるファイルをアップロードできますが、アップロードするファイルの最大サイズについては、この資料に記載されている内容に従うことを推奨します。ファイルの最大アップロード サイズをより厳密に決定するには、実際の運用環境に近いコンピュータでストレス テストを実行してください。

ファイルのアップロード処理の際にファイル サイズが制限を超えると、次のエラー メッセージが表示される場合があります。
  • ページを表示できません。
  • サーバー アプリケーションは使用できません。
    イベント ログには、次のようなエラー メッセージが出力されます。

    メモリ使用が SizeLimit MB (使用可能 RAM の Percentage%) を超えたため、aspnet_wp.exe (PID: PIDNumber) が繰り返されました。

  • 種類 System.OutOfMemoryException の例外がスローされました。
また、アップロードが非常に低速になる場合もあります。Windows タスク マネージャで Aspnet_wp.exe プロセスを観察すると、メモリ使用量の増分が 1 ~ 2 秒ごとに 64 KB ずつ変化していることがわかります。ファイルのサイズによっては、この遅延により responseDeadlock エラーが発生し、ASP.NET のワーカー プロセスがリサイクルされる場合があります。
関連情報
この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 295626 (最終更新日 2003-11-04) を基に作成したものです。

この資料に含まれているサンプル コード/プログラムは英語版を前提に書かれたものをありのままに記述しており、日本語環境での動作は確認されておりません。
プロパティ

文書番号:295626 - 最終更新日: 10/26/2007 20:32:22 - リビジョン: 6.3

Microsoft ASP.NET 1.1, Microsoft ASP.NET 1.0

  • kbproductlink kbconfig kbprb kbservercontrols KB295626
フィードバック
/html>>