Pergunta

Inicialmente eu estava tentando descobrir o que é a diferença entre Response.Close e Response.End, mas depois de fazer mais googling e pesquisa, fica claro que eu não vi uma maneira comum um byte [] é enviado de volta para o cliente. Vou deixar o exemplo de código abaixo, mas eu gostaria de saber qual é o padrão da indústria é para fazer isso.

Byte[] myBytes = GetReportBytes();
HttpContext.Current.Response.ClearContent();
HttpContext.Current.Response.AppendHeader("content-length", myBytes.Length.ToString());
HttpContext.Current.Response.AppendHeader("content-Disposition", "attachment;filename=" + this.ReportFileName + GetReportExtension());
HttpContext.Current.Response.ContentType = GetApplicationContentType();
HttpContext.Current.Response.BinaryWrite(myBytes);
HttpContext.Current.Response.Flush();
HttpContext.Current.Response.Close();
//CERT FIX
//HttpContext.Current.Response.End();
Foi útil?

Solução

Eu não chamaria Response.Close() ou Response.End().

Response.End() irá parar a execução da página / tornando naquele ponto. No código a seguir Response.End() será executado. A resposta é encerrado nesse ponto sem saída adicional adicionado à corrente de.

Response.Close() é semelhante ao Response.End(), mas permite que o código a ser executado depois de ser chamado (mas nenhuma outra saída pode ser enviada na resposta da página).

Response.Flush() irá enviar todos os itens de resposta restantes para a página.

A partir de um IIS núcleo membro da equipe :

Response.Close envia um pacote de reset para o cliente e usá-lo em qualquer coisa que não seja condição de erro vai levar para todos os tipos de problemas - por exemplo, se você está falando com um cliente com suficiente latência, o pacote de reset pode causar quaisquer outros dados de resposta em tamponada o servidor, cliente ou em algum lugar entre a ser descartado.

Neste caso particular, a compressão envolve procurando padrões comuns dentro da resposta e uma certa quantidade de resposta tem de ser tamponado pela código de compressão para aumentar a chance de encontrar mais tempo repetindo padrões - esta parte que é tamponado não pode ser enviado para o cliente, uma vez que fazer Response.Close ().

Em suma, não use Response.Close ().

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top