Erro HTTP 500 ou limite de buffer de resposta excedido ao usar Response.BinaryWrite no IIS

Este artigo ajuda a resolver o erro (HTTP 500 ou limite de buffer de resposta excedido) que ocorre quando você usa o Response.BinaryWrite método no Active Server Pages (ASP) para enviar um arquivo.

Versão original do produto: Serviços de Informações da Internet, ASP (Active Server Pages)
Número original do KB: 944886

Sintomas

Considere o cenário a seguir.

  • Você envia um arquivo para um computador cliente a partir de um servidor Web no qual o IIS (Serviços de Informações da Internet) está instalado.
  • Use o Response.BinaryWrite método para enviar o arquivo para o computador cliente e a AspBufferingOn propriedade é definida como False.

Nesse cenário, você pode receber uma das seguintes mensagens de erro no computador cliente:

  • Mensagem de erro 1

    HTTP 500 - Erro interno do servidor

  • Mensagem de erro 2

    Erro de objeto de resposta 'ASP 0251: 80004005'
    Limite de buffer de resposta excedido
    A execução da página ASP fez com que o Buffer de Resposta excedesse seu limite configurado.

Além disso, você pode receber uma mensagem semelhante à seguinte no arquivo de log do IIS:

ASP_0251_:_80004005|Response_Buffer_Limit_Exceeded

Causa

Esse problema ocorre porque o IIS impõe um valor de buffer de resposta ASP padrão de 4 MB quando o buffer de resposta ASP está desabilitado.

Na maioria dos cenários, o limite de buffer de 4 MB é suficiente para respostas ASP enviadas a clientes Web. Se esse limite for insuficiente, use um dos métodos a seguir.

Resolução 1: Diminuir o tamanho da resposta

Para resolver esse problema quando você usa o método e o Response.BinaryWrite buffer ASP está desativado, verifique se os dados retornados ao cliente não são maiores que 4 MB.

Se a resposta for maior que o valor padrão de 4 MB, esse tamanho frequentemente causará uma experiência ruim para o usuário. O navegador da Web deve receber a resposta grande pela rede. Em seguida, o navegador da Web deve analisar e exibir uma resposta HTML grande.

Resolução 2: Habilitar o buffer de resposta ASP e aumentar o limite de buffer

Você pode usar a propriedade da metabase do AspBufferingOn IIS para habilitar ou desabilitar o buffer no nível do aplicativo.

Observação

No IIS, você pode habilitar ou desabilitar o buffer de resposta ASP no nível do aplicativo usando o bufferingOn valor na seção ASP de <System.webserver> no ApplicationHost.config arquivo ou no Web.config arquivo.

Para habilitar ou desabilitar o buffer no nível da página, você pode usar a Response.Buffer propriedade.

Se você precisar aumentar o limite de buffer, selecione um limite de buffer que permita o maior tamanho de resposta conhecido. Se você não souber o maior tamanho de resposta com antecedência, poderá aumentar o limite de buffer para um valor grande durante o teste. Depois de concluir o teste, use o maior valor que aparece no campo sc-bytes no arquivo de log do IIS para a resposta gerada para a página.

Para aumentar o limite de buffer no IIS, siga estas etapas:

  1. Selecione Iniciar, selecione Executar, digite cmd e selecione OK.

  2. Digite o cd /d %systemdrive%\inetpub\adminscripts comando e selecione Enter.

  3. Digite o cscript.exe adsutil.vbs SET w3svc/aspbufferinglimit LimitSize comando e selecione Enter.

    Observação

    LimitSize representa o tamanho limite de buffer em bytes. Por exemplo, o número 67108864 define o tamanho do limite de buffer como 64 MB.

Para confirmar se o limite de buffer está definido corretamente, siga estas etapas:

  1. Selecione Iniciar, selecione Executar, digite cmd e selecione OK.
  2. Digite o cd /d %systemdrive%\inetpub\adminscripts comando e selecione Enter.
  3. Digite o cscript.exe adsutil.vbs GET w3svc/aspbufferinglimit comando e selecione Enter.

Mais informações

Quando você usa o método e o Response.BinaryWrite buffer de resposta ASP está desabilitado, você só pode enviar 4 MB de dados para o cliente, a menos que a propriedade de limite de buffer da página seja definida explicitamente. Por padrão, o valor da bufferLimit propriedade no IIS é de 4.194.304 bytes.

Além disso, a BinaryWrite() API falhará se a resposta ao cliente for maior que o valor limite do buffer, mesmo que o buffer de resposta ASP esteja desativado.

Observação

Recomendamos que você habilite o buffer de resposta ASP. O buffer de resposta ASP aumenta o desempenho de um aplicativo Web.