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

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

重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。

英語版 KB:812406
現象
使用しようとしたとき、 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 サイトを参照してください。
Notice
この資料に記載されているサードパーティ製品が製造されていますマイクロソフトと関連のある企業。マイクロソフトは、保証を負わない、黙示、パフォーマンスや信頼性これらのについて製品。

警告: この記事は自動翻訳されています

プロパティ

文書番号:812406 - 最終更新日: 07/28/2011 14:30:00 - リビジョン: 6.0

  • kbdownload kbwebserver kbwebforms kbweb kbprb kbmt KB812406 KbMtja
フィードバック