PRB: Response.WriteFile、サイズの大きいファイルをダウンロードできません。

文書翻訳 文書翻訳
文書番号: 812406
Notice
この資料に記載されているサードパーティ製品が製造されていますマイクロソフトと関連のある企業。マイクロソフトは、保証を負わない、黙示、パフォーマンスや信頼性これらのについて製品。
すべて展開する | すべて折りたたむ

目次

現象

使用しようとしたとき、 Response.WriteFile ダウンロードが応答しないことが、大きなファイルのダウンロード方法と次のエラー メッセージのいずれかが表示される場合があります。
ページ表示することができません
- または -
サーバー アプリケーション使用できません。

これにアクセスしようとしている Web アプリケーションWeb サーバーが現在利用できないです。[更新] ボタンをクリックしてください、Web ブラウザーを使用して、要求を再試行します。

管理者メモ: エラーこの特定の要求エラーの原因を説明するメッセージの参照します。web サーバーのシステム イベント ログ。このログ エントリにしてください。発生するこのエラーの原因を検出します。
またが表示されることがあります、次のメッセージがアプリケーション イベント ログに:

Aspnet_wp.exe(Microsoft インターネット インフォメーション サービス [IIS] 6.0 上で実行するアプリケーションの W3wp.exe)予期せずに停止しました。

このプロセスでは、さらにあります、Web サーバーのメモリ使用率の増加します。

原因

Web サーバー コンピューターのハードウェア構成正常にダウンロードできるファイルの最大サイズを指定します。場合は、ASP。NET のワーカー プロセス (Aspnet_wp.exe、またはインターネット インフォメーション サービス 6.0 の [IIS] アプリケーションの W3wp.exe)ファイルのダウンロード] ダイアログ ボックスが表示されます、ファイルのダウンロード要求を実行します。は、ASP。Microsoft インターネットにデータを送信するのには NET のワーカー プロセスを開始します。インフォメーション サービス プロセス (Inetinfo.exe または Dllhost.exe)。表示されていません。クリックするまで待つ [OK].

によっては、コンピューターの構成は、IIS プロセス、データの処理可能性がありますまたは、データはメモリにバッファリングする場合があります。ファイルのサイズが大きい場合は、データのバッファリングされます。これら 2 つのプロセス間の通信中にメモリがします。これが発生する可能性があります、サーバー上のメモリ使用率の増加します。エラーのために発生します。メモリの制約は、Web サーバー上で。

回避策

この問題を回避するには、次のいずれかを使用します。方法:
  • 小さな部分では、データを取得し、データを移動出力ストリームにダウンロードします。次のコードを行う方法を示しています。これ。

    重要です 値を設定すると、 デバッグ コンパイル要素の属性 false ASP の Web.config ファイルにします。NET アプリケーションする必要があります設定、 Server.ScriptTimeout ファイルのダウンロード サイズに対して適切な値のプロパティです。既定では、 Server.ScriptTimeout 値は 90 秒に設定されます。ただし、場合は、 デバッグ 属性を設定するのには true、、 Server.ScriptTimeout 値が非常に大きい 30,000,000 の秒になります。開発者は、ASP の動作を可能性があります影響を注意する必要する必要があります。NET Web アプリケーションです。

    またを次のコードで注意する必要があります、パラメーターの値を持つことができます、 FileStream コンス トラクターです。列挙値指定することに大きな影響を与える機能は用意されています。の詳細についてを参照してください、 FileStream リンクするのには参照 セクションです。
    ビジュアル基本的です。NET コード
          Dim iStream As System.IO.Stream
    
          ' Buffer to read 10K bytes in chunk:
          Dim buffer(10000) As Byte
    
          ' Length of the file:
          Dim length As Integer
    
          ' Total bytes to read:
          Dim dataToRead As Long
    
          ' Identify the file to download including its path.
          Dim filepath As String = "DownloadFileName"
    
          ' Identify the file name.
          Dim filename As String = System.IO.Path.GetFileName(filepath)
    
          Try
             ' Open the file.
             iStream = New System.IO.FileStream(filepath, System.IO.FileMode.Open, _
                                                    IO.FileAccess.Read, IO.FileShare.Read)
    
             ' Total bytes to read:
             dataToRead = iStream.Length
             
             Response.ContentType = "application/octet-stream"
             Response.AddHeader("Content-Disposition", "attachment; filename=" & filename)
    
             ' Read the bytes.
                While dataToRead > 0
                    ' Verify that the client is connected.
                    If Response.IsClientConnected Then
                        ' Read the data in buffer
                        length = iStream.Read(buffer, 0, 10000)
    
                        ' Write the data to the current output stream.
                        Response.OutputStream.Write(buffer, 0, length)
    
                        ' Flush the data to the HTML output.
                        Response.Flush()
    
                        ReDim buffer(10000) ' Clear the buffer
                        dataToRead = dataToRead - length
                    Else
                        'prevent infinite loop if user disconnects
                        dataToRead = -1
                    End If
                End While
    
          Catch ex As Exception
             ' Trap the error, if any.
             Response.Write("Error : " & ex.Message)
          Finally
             If IsNothing(iStream) = False Then
                ' Close the file.
                iStream.Close()
             End If
             Response.Close()
          End Try
    
    Visual C#。NET コード
    	System.IO.Stream iStream = null;
    
    	// Buffer to read 10K bytes in chunk:
    	byte[] buffer = new Byte[10000];
    
    	// Length of the file:
    	int length;
    
    	// Total bytes to read:
    	long dataToRead;
    
    	// Identify the file to download including its path.
    	string filepath  = "DownloadFileName";
    
    	// Identify the file name.
    	string  filename  = System.IO.Path.GetFileName(filepath);
    
    	try
    	{
    		// Open the file.
    		iStream = new System.IO.FileStream(filepath, System.IO.FileMode.Open, 
    					System.IO.FileAccess.Read,System.IO.FileShare.Read);
    
    
    		// Total bytes to read:
    		dataToRead = iStream.Length;
    
    		Response.ContentType = "application/octet-stream";
    		Response.AddHeader("Content-Disposition", "attachment; filename=" + filename);
    
    		// Read the bytes.
      		while (dataToRead > 0)
    		{
    			// Verify that the client is connected.
    			if (Response.IsClientConnected) 
    			{
    				// Read the data in buffer.
    				length = iStream.Read(buffer, 0, 10000);
    
    				// Write the data to the current output stream.
    				Response.OutputStream.Write(buffer, 0, length);
    
    				// Flush the data to the HTML output.
    				Response.Flush();
    
    				buffer= new Byte[10000];
    				dataToRead = dataToRead - length;
    			}
    			else
    			{
    				//prevent infinite loop if user disconnects
    				dataToRead = -1;
    			}
    		}
    	}
    	catch (Exception ex) 
    	{
    		// Trap the error, if any.
    		Response.Write("Error : " + ex.Message);
    	}
    	finally
    	{
    		if (iStream != null) 
    		{
    			//Close the file.
    			iStream.Close();
    		}
    		Response.Close();
    	}
    	
    置換 DownloadFileName 名前、100 メガバイト (MB) より大きいファイルです。

    - または -
  • リンクをダウンロードすると、ユーザーは、ファイルです。

    - または -
  • ダウンロードを Microsoft ASP 3.0 を使用するか、ソフトウェアを使用します。Asp の artisans FileUp。

    - または -
  • ダウンロードするのには、ISAPI 拡張機能の作成、ファイルです。

    - または -
  • FTP を使用してファイルをダウンロードします。

状況

これ動作は仕様です。

詳細

現象の再現手順

  1. マイクロソフトの Visual Basic で。NET または Microsoft Visual C#.NET は、新しい Web アプリケーション プロジェクトを作成します。既定では、WebForm1.aspx のです。作成します。
  2. ドラッグします。 button オブジェクト ツールボックスから WebForm1.aspx にします。
  3. ダブルクリック、 button オブジェクト 開くには クリックしてください。 [コード] ビューでのイベントです。
  4. 次のコードを Button1 に貼り付けます クリックしてください。 イベントです。

    Visual Basic。NET コード
    	' Identify the file to download including its path.
    	Dim filepath As String = DownloadFileName
    
    	' Identify the file name.
    	Dim filename As String = System.IO.Path.GetFileName(filepath)
    
    	Response.Clear()
    	
    	' Specify the Type of the downloadable file.
    	Response.ContentType = "application/octet-stream"
    
    	' Set the Default file name in the FileDownload dialog box.
    	Response.AddHeader("Content-Disposition", "attachment; filename=""" & filename & """")
    
    	Response.Flush()
    
    	' Download the file.
    	Response.WriteFile(filepath)

    Visual C#。NET コード
    	// Identify the file to download including its path.
    	string filepath = DownloadFileName;
    
    	// Identify the file name.
    	string filename = System.IO.Path.GetFileName(filepath);
    
    	Response.Clear();
    
    	// Specify the Type of the downloadable file.
    	Response.ContentType = "application/octet-stream";
    
    	// Set the Default file name in the FileDownload dialog box.
    	Response.AddHeader("Content-Disposition", "attachment; filename=" + filename);
    
    	Response.Flush();
    
    	// Download the file.
    	Response.WriteFile(filepath);
  5. 置換 DownloadFileName 使用する SMTP サーバー100 mb を超えるファイルの名前。
  6. で、 デバッグ メニューをクリックして開始.
  7. クリックしてください。 Button1.

関連情報

詳細については、マイクロソフト サポート技術記事を表示するのには、次の資料番号をクリックしてください。
307603 ASP を使用して、ブラウザーにバイナリファイルを書き込む方法を指定します。NET と Visual Basic。NET
306654 ASP を使用して、ブラウザーにバイナリファイルを書き込む方法を指定します。NET、Visual C#。NET
詳細については、次のマイクロソフト開発ネットワーク (MSDN) Web サイトを参照してください。
.aspx の http://msdn2.microsoft.com/en-us/library/system.io.filestream (vs.71)

プロパティ

文書番号: 812406 - 最終更新日: 2011年7月28日 - リビジョン: 6.0
キーワード:?
kbdownload kbwebserver kbwebforms kbweb kbprb kbmt KB812406 KbMtja
機械翻訳の免責
重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。
英語版 KB:812406
Microsoft Knowledge Base の免責: Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com