PRB: Response.WriteFile ไม่สามารถดาวน์โหลดแฟ้มขนาดใหญ่

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 812406 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
หมายเหตุ
ผลิตภัณฑ์อื่นๆ ซึ่งกล่าวถึงในบทความนี้ เป็นผลิตภัณฑ์ที่ผลิตโดยบริษัทอื่นๆ ที่ไม่เกี่ยวข้องกับ Microsoft Microsoft ไม่มีการรับประกันใดๆ ไม่ว่าโดยนัยหรือรูปแบบอื่นใด เกี่ยวกับประสิทธิภาพหรือความเชื่อถือได้ของผลิตภัณฑ์เหล่านี้
ขยายทั้งหมด | ยุบทั้งหมด

เนื้อหาบนหน้านี้

อาการ

เมื่อคุณพยายามใช้นั้นResponse.WriteFileวิธีการดาวน์โหลดแฟ้มขนาดใหญ่ การดาวน์โหลดอาจไม่ตอบสนอง และจากนั้นคุณอาจได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้อย่างใดอย่างหนึ่ง:
The page cannot be displayed.
หรือ
แอพพลิเคชันเซิร์ฟเวอร์ไม่พร้อมใช้งาน

ในขณะนี้ไม่มีเว็บแอพลิเคชันที่คุณกำลังพยายามเข้าถึงบนเว็บเซิร์ฟเวอร์นี้ กรุณากดปุ่ม "ฟื้นฟู" ในเว็บเบราว์เซอร์ของคุณให้ลองทำการร้องขอของคุณใหม่

บันทึกย่อของผู้ดูแล: ข้อผิดพลาด detailing สาเหตุของความล้มเหลวในการร้องขอที่ระบุนี้สามารถพบข้อความในบันทึกเหตุการณ์ของระบบของเว็บเซิร์ฟเวอร์ กรุณาตรวจทานรายการแฟ้มบันทึกนี้เพื่อค้นหาสิ่งที่เกิดจากข้อความแสดงข้อผิดพลาดนี้เกิดขึ้น
คุณอาจได้รับข้อความต่อไปนี้ในแฟ้มบันทึกเหตุการณ์ของโปรแกรมประยุกต์:

Aspnet_wp.exe (หรือ W3wp.exe สำหรับโปรแกรมประยุกต์ที่รันในบริการข้อมูลทางอินเทอร์เน็ตของ Microsoft [IIS] 6.0) หยุดลงโดยไม่คาดคิด

ในระหว่างกระบวนการนี้ คุณอาจสังเกตเห็นเพิ่มขึ้นในการใช้งานหน่วยความจำของเว็บเซิร์ฟเวอร์เช่นกัน

สาเหตุ

การกำหนดค่าฮาร์ดแวร์ของคอมพิวเตอร์ของเซิร์ฟเวอร์เว็บกำหนดขนาดแฟ้มสูงสุดที่คุณสามารถดาวน์โหลดเสร็จเรียบร้อยแล้ว เมื่อการร้องขอการดาวน์โหลดแฟ้มที่ทำงานของกระบวนตอนตัวทำ ASP.NET (Aspnet_wp.exe หรือ W3wp.exe สำหรับโปรแกรมประยุกต์ที่รันบน 6.0 บริการข้อมูลทางอินเทอร์เน็ต [IIS) กล่องโต้ตอบการดาวน์โหลดแฟ้มปรากฏขึ้น กระบวนการของผู้ปฏิบัติงานของ ASP.NET ที่เริ่มต้นการส่งข้อมูลไป Microsoft Internet ข้อมูลบริการกระบวน (Inetinfo.exe หรือ Dllhost.exe) จะไม่รอให้คุณคลิกตกลง.

ทั้งนี้ขึ้นอยู่กับการกำหนดค่าของเครื่องคอมพิวเตอร์ ระหว่างดำเนินการ IIS อาจประมวลผลข้อมูล หรืออาจมีบัฟเฟอร์ข้อมูลในหน่วยความจำ เมื่อแฟ้มมีขนาดใหญ่ ข้อมูลที่มีบัฟเฟอร์ในหน่วยความจำในระหว่างการสื่อสารระหว่างกระบวนการที่สองเหล่านี้ ซึ่งอาจทำให้มีการเพิ่มในการใช้งานหน่วยความจำบนเซิร์ฟเวอร์ ข้อผิดพลาดเกิดขึ้นเนื่องจากข้อจำกัดของหน่วยความจำบนเว็บเซิร์ฟเวอร์

การหลีกเลี่ยงปัญหา

เมื่อต้องการแก้ไขปัญหานี้ ใช้หนึ่งในวิธีการต่อไปนี้:
  • การขอรับข้อมูลในส่วนที่ขนาดเล็ก และจากนั้น ย้ายข้อมูลไปกระแสข้อมูลขาออกสำหรับการดาวน์โหลด รหัสต่อไปนี้อธิบายวิธีการนี้

    สิ่งสำคัญเมื่อคุณกำหนดค่าของการตรวจแก้จุดบกพร่องแอตทริบิวต์ขององค์ประกอบคอมไพล์ไปเท็จในแฟ้ม Web.config ของโปรแกรมประยุกต์ ASP.NET ของคุณ คุณต้องตั้งค่านี้Server.ScriptTimeoutคุณสมบัติที่เป็นค่าเหมาะสมสำหรับขนาดการดาวน์โหลดแฟ้ม โดยค่าเริ่มต้น การServer.ScriptTimeoutค่าถูกกำหนดเป็นวินาที 90 อย่างไรก็ตาม เมื่อนั้นตรวจแก้จุดบกพร่องแอตทริบิวต์ที่กำหนดไว้เป็นTrueกระบวนการServer.ScriptTimeoutค่าจะถูกกำหนดเป็นตัวใหญ่มากวินาที 30,000,000 เป็นนักพัฒนา คุณต้องระวังผลกระทบที่นี้อาจมีในลักษณะการทำงานของโปรแกรมประยุกต์ ASP.NET เว็บของคุณ

    นอกจากนี้ยัง ในรหัสที่คุณทำตามต้องระวังของค่าพารามิเตอร์ที่จะใช้กับFileStreamตัวสร้าง ค่าของการแจงนับที่ specifed ทำผลกระทบที่สำคัญในฟังก์ชันการทำงานที่ให้ไว้ สำหรับข้อมูลเพิ่มเติม โปรดไปFileStreamการเชื่อมโยงในนั้นอ้างอิง:ส่วน
    visual พื้นฐาน.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();
    	}
    	
    REPLACEDownloadFileNameมีชื่อของแฟ้มที่มีขนาดใหญ่กว่า 100 การเมกะไบต์ (MB)

    หรือ
  • ให้การเชื่อมโยงสำหรับผู้ใช้สามารถดาวน์โหลดแฟ้ม

    หรือ
  • ใช้ Microsoft ASP 3.0 สำหรับการดาวน์โหลดใน หรือใช้ซอฟต์แวร์ FileUp Artisans กับ ASP

    หรือ
  • สร้างนามสกุล ISAPI เพื่อดาวน์โหลดแฟ้ม

    หรือ
  • ใช้ FTP เพื่อดาวน์โหลดแฟ้ม

สถานะ

ลักษณะการทำงานนี้เกิดจากการออกแบบ

ข้อมูลเพิ่มเติม

ขั้นตอนในการทำให้สถานการณ์เกิดขึ้นอีกครั้ง

  1. ใน Microsoft Visual Basic .NET หรือใน Microsoft Visual c# .NET สร้างโครงการใหม่ของแอพลิเคชันเว็บ โดยค่าเริ่มต้น WebForm1.aspx ถูกสร้างขึ้น
  2. ลากตัวปุ่มวัตถุจากกล่องเครื่องมือการ WebForm1.aspx
  3. คลิกสองครั้งปุ่มวัตถุเมื่อต้องการเปิดการคลิกเหตุการณ์ในมุมมองรหัส
  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. REPLACEDownloadFileNameมีชื่อของแฟ้มที่มีขนาดใหญ่กว่า 100 MB
  6. ในการตรวจแก้จุดบกพร่องเมนู คลิกเริ่มการทำงาน.
  7. คลิกbutton1.

ข้อมูลอ้างอิง

หากต้องการทราบข้อมูลเพิ่มเติม โปรดคลิกที่หมายเลขบทความต่อไปนี้เพื่อดูบทความใน Microsoft Knowledge Base::
307603วิธีการเขียนแฟ้มไบนารีการเบราว์เซอร์ที่ใช้ ASP.NET และ Visual Basic .NET
306654วิธีการเขียนแฟ้มไบนารีการเบราว์เซอร์ที่ใช้ ASP.NET และ Visual .NET c#
สำหรับข้อมูลเพิ่มเติม โปรดแวะไปที่เว็บไซต์ต่อไปนี้ของ Microsoft Developer Network (MSDN)::
.aspx http://msdn2.microsoft.com/en-us/library/system.io.filestream (vs.71)

คุณสมบัติ

หมายเลขบทความ (Article ID): 812406 - รีวิวครั้งสุดท้าย: 14 มกราคม 2554 - Revision: 3.0
ใช้กับ
  • Microsoft Web Services Enhancements for Microsoft .NET 1.1
  • Microsoft ASP.NET 1.1
  • Microsoft ASP.NET 1.0
Keywords: 
kbwebserver kbwebforms kbweb kbdownload kbprb kbmt KB812406 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:812406

ให้ข้อเสนอแนะ

 

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