Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Aviso
Os produtos de terceiros descritos neste artigo são fabricados por empresas que são independentes da Microsoft. A Microsoft não oferece garantia, implícita ou não, em relação ao desempenho ou à confiabilidade desses produtos.
Ao tentar usar o método Response.WriteFile para baixar um arquivo grande, o download não pode responder e, em seguida, você pode receber uma das seguintes mensagens de erro:
A página não pode ser exibida
- ou -
Aplicativo de servidor não disponível
O aplicativo Web que você está tentando acessar neste servidor Web é indisponível no momento. Clique no botão "Atualizar" no navegador da Web para repetir a solicitação.
Observação do administrador: Uma mensagem de erro detalhando a causa dessa falha de solicitação específica pode ser encontrada no log de eventos do sistema do servidor web. Examine essa entrada de log para descobrir o que causou o erro ocorrer.
Também poderá receber a seguinte mensagem no log de eventos do aplicativo:
Aspnet_wp.exe (ou W3wp.exe, para aplicativos que são executados no Microsoft IIS [] 6.0) interrompido inesperadamente.
Durante esse processo, você também pode perceber um aumento na utilização de memória do servidor Web.
A configuração de hardware do computador do servidor Web determina o tamanho máximo do arquivo que você pode baixar com êxito. Quando o processo do operador do ASP.NET (Aspnet_wp.exe ou W3wp.exe para aplicativos que são executados no Internet Information Services 6.0 [IIS]) executa a solicitação de download de arquivo, a caixa de diálogo de download de arquivo será exibida. O processo do operador do ASP.NET começa a enviar os dados para o processo do Microsoft Internet Information Services (Inetinfo.exe ou Dllhost.exe). Ele não espera para que você clique em OK .
Dependendo da configuração do computador, o processo do IIS pode processar os dados ou os dados podem ser armazenado em buffer na memória. Quando o arquivo é grande, os dados é armazenado em buffer na memória durante a comunicação entre esses dois processos. Isso pode causar um aumento na utilização de memória no servidor. O erro ocorre devido as restrições de memória no servidor Web.
Para contornar esse problema, use qualquer um dos seguintes métodos:
Obter os dados em pequenas partes e mova os dados no fluxo de saída para download. O código a seguir demonstra como fazer isso.
importante Quando você define o valor do atributo debug do elemento compilation para false no arquivo Web.config do seu aplicativo ASP.NET, você deve definir a propriedade Server.ScriptTimeout para um valor apropriado para o tamanho do arquivo de download. Por padrão, o valor Server.ScriptTimeout é definido como 90 segundos. No entanto, quando o atributo debug é definido como true , o Server.ScriptTimeout valor será definido para um grande 30,000,000 segundos. Como desenvolvedor, você deve estar ciente do impacto que isso pode ter o comportamento do seu aplicativo ASP.NET.
Além disso, no código a segue você deve estar ciente dos valores de parâmetro que são usados com do construtor FileStream . Os valores de enumeração que forem especificados faça um impacto significativo na funcionalidade fornecida. Para obter mais informações, consulte o link de FileStream na seção REFERENCES. código do Visual Basic .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
Código do .NET translation from VPE for Csharp visual
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();
}
substituir DownloadFileName com o nome de um arquivo que está maior do que 100 megabytes (MB).
- ou -
Forneça um link para o usuário baixe o arquivo.
- ou -
Use Microsoft ASP 3.0 para os downloads ou use Software Artisans FileUp com o ASP.
No Microsoft Visual Basic .NET ou no Microsoft Visual translation from VPE for Csharp. NET, criar um novo projeto Web Application. Por padrão, WebForm1.aspx é criado.
Arraste um objeto de botão da caixa de ferramentas a WebForm1.aspx.
Clique duas vezes o objeto de botão para abrir o evento Click no modo de exibição código.
Cole o seguinte código no evento Button1 clique .
código do 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)
código do .NET translation from VPE for Csharp Visual
// 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);
Substitua DownloadFileName pelo nome de um arquivo que é maior do que 100 MB.
Para obter mais informações, clique nos números abaixo para ler os artigos na Base de dados de Conhecimento da Microsoft:
307603
(http://support.microsoft.com/kb/307603/
)
Como gravar arquivos binários para o navegador usando ASP.NET e Visual Basic .NET
306654
(http://support.microsoft.com/kb/306654/
)
Como gravar arquivos binários para o navegador usando ASP.NET e Visual translation from VPE for Csharp .NET
Para obter mais informações, visite o seguinte site da Web Microsoft Developer Network (MSDN):
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 812406
(http://support.microsoft.com/kb/812406/en-us/
)
Quanto esforço foi necessário para seguir os procedimentos deste artigo?
Muito baixo
Baixo
Moderado
Alto
Muito alto
O que podemos fazer para melhorar essa informação?
Para proteger sua privacidade, não inclua informações de contato em seus comentários.
Obrigado! Seus comentários são usados para nos ajudar a aperfeiçoar o conteúdo de suporte. Para obter mais opções de ajuda, visite a Home Page de Ajuda e Suporte.