SORUN: Response.WriteFile büyük boyutlu bir dosyayı karşıdan yükleyemiyor

Makale çevirileri Makale çevirileri
Makale numarası: 812406 - Bu makalenin geçerli olduğu ürünleri görün.
Duyuru
Bu makalede açıklanan üçüncü taraf ürünleri Microsoft'tan bağımsız şirketler tarafından üretilmektedir. Microsoft bu ürünlerin performans veya güvenilirliğiyle ilgili hiçbir garanti vermemektedir.
Hepsini aç | Hepsini kapa

Bu Sayfada

Belirtiler

Response.WriteFile yöntemi büyük bir dosyayı karşıdan yüklemeye çalıştığınızda yükleme yanıt vermeyebilir ve sonra aşağıdaki hata iletilerinden birini alabilirsiniz:
Sayfa görüntülenemiyor
-VEYA-
Sunucu Uygulaması Kullanılamıyor

Bu Web sunucusunda erişmeye çalıştığınız Web uygulaması şu anda kullanılamıyor. Lütfen isteğinizi yeniden denemek için Web tarayıcınızdaki "Yenile" düğmesine basın.

Yönetici notu: Bu özel istek başarısızlık nedeninin ayrıntıları bir hata iletisi, web sunucusu sistem olay günlüğünde bulunabilir. Ne bu hata oluşmasına neden bulmak için bu günlük girdisi gözden geçirin.
Ayrıca, uygulama olay günlüğüne aşağıdaki iletiyi alabilirsiniz:

Aspnet_wp.exe (veya Microsoft ınternet ınformation Services [IIS] 6. 0'da çalışan uygulamalar için W3wp.exe) beklenmedik biçimde durdu.

Bu işlem sırasında Web sunucusu bellek kullanımını bir artış görebilirsiniz.

Neden

Web sunucusu bilgisayarın donanım yapılandırmasına başarıyla karşıdan yükleyebileceğiniz en büyük dosya boyutunu belirler. ASP.NET çalışan işleminin (Aspnet_wp.exe veya ınternet ınformation Services 6.0 [IIS] çalışan uygulamalar için W3wp.exe), dosya karşıdan yükleme isteği çalıştığında, dosya yükleme iletişim kutusu görüntülenir. Microsoft ınternet ınformation Services işlem için (ınetinfo.exe veya Dllhost.exe) veri göndermek ASP.NET alt işlemi başlatır. Tamam ' ı tıklatın, için beklemez.

Bilgisayarın yapılandırmasına bağlı olarak, IIS işlem verileri işlemek veya verileri bellekte arabelleğe. Dosya büyük olduğunda, verileri bellekte bu iki işlem arasında iletişim sırasında arabelle?e. Sunucudaki bellek kullanımı bu bir artışa neden olabilir. Web sunucusu bellek kısıtlamalar nedeniyle bu hata oluşur.

Pratik Çözüm

Bu soruna geçici bir çözüm bulmak için <a0></a0>, aşağıdaki yöntemlerden birini kullanın:
  • Küçük bölümlerini verileri almak ve verileri, çıkış akışı karşıdan taşıyın. Aşağıdaki kod, bunun nasıl yapılacağını gösterir.

    Önemli Derleme</a0> öğesinin <a2>debug</a2> özniteliği değeri ASP.NET uygulamanızın Web.config dosyasında false olarak ayarladığınızda, Server.ScriptTimeout özelliği, dosya karşıdan yükleme boyutu için uygun bir değere ayarlamalısınız. Varsayılan olarak, Server.ScriptTimeout değeri 90 saniye olarak ayarlanır. Hata ayıklama özniteliği true olarak ayarlandığında, ancak Server.ScriptTimeout değeri çok büyük bir için 30,000,000 saniye ayarlanır. Geliştirici olarak, bu davranışı ASP.NET Web uygulamanızın üzerinde etkisi bilmeniz gerekir.

    Ayrıca, aşağıdaki kodu FileStream Oluşturucusu ile kullanılan parametre değerleri bilmelisiniz. Belirtilen numaralandırma değerleri, sağlanan işlevsellik hakkında önemli bir etkisi olun. Daha fazla bilgi için <a0>REFERENCES</a0> bölümündeki <a2>FileStream</a2> bağlantısına bakın.
    Visual Basic .NET koduFarklı System.IO.Stream
          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 kod
    	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 megabayttan (MB) büyük olan bir dosya adını değiştirme.

    -VEYA-
  • Dosyayı karşıdan yüklemek bu kullanıcı için bir bağlantı sağlar.

    -VEYA-
  • Microsoft ASP 3.0 yüklemeleri için veya yazılım Artisans FileUp ASP ile.

    -VEYA-
  • Dosyayı karşıdan yüklemek için bir ISAPI uzantısı'nı oluşturun.

    -VEYA-
  • FTP, dosyayı karşıdan yüklemek için kullanın.

Durum

Bu davranış tasarım yüzündendir.

Daha fazla bilgi

Davranışı Yeniden Oluşturma Adımları

  1. Microsoft Visual Basic. NET'te veya, Microsoft Visual C# .NET, yeni bir Web uygulaması) projesi oluşturun. Varsayılan olarak, WebForm1.aspx oluşturulur.
  2. Araç kutusundan, bir düğme nesnesi için WebForm1.aspx dosyasına sürükleyin.
  3. Kod Görünümü'nde olay'ı açmak için düğme nesnesi çift tıklatın.
  4. Aşağıdaki kodu Button1 tıklatın olayına yapıştırın.

    Visual Basic .NET kodu
    	' 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 kod
    	// 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 100 MB'DEN büyük bir dosyanın adını değiştirin.
  6. Hata Ayıkla) menüsünde, Başlat ' ı tıklatın.
  7. Button1</a1> düğmesini tıklatın.

Referanslar

Daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleleri görüntülemek üzere aşağıdaki makale numaralarını tıklatın:
307603 ASP.NET ve Visual Basic .NET kullanarak tarayıcıya ikili dosyaları yazma
306654 ASP.NET ve Visual C#. NET'i kullanarak tarayıcıya ikili dosyaları yazma
Daha fazla bilgi için aşağıdaki Microsoft Developer Network (MSDN) Web sitesini ziyaret edin:
http://msdn2.microsoft.com/en-us/library/system.io.filestream(vs.71).aspx

Özellikler

Makale numarası: 812406 - Last Review: 21 Kasım 2007 Çarşamba - Gözden geçirme: 4.3
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Web Services Enhancements for Microsoft .NET 1.1
  • Microsoft ASP.NET 1.1
  • Microsoft ASP.NET 1.0
Anahtar Kelimeler: 
kbmt kbwebserver kbwebforms kbweb kbdownload kbprb KB812406 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:812406

Geri Bildirim Ver

 

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