Response.End () vs HttpContext.Current.ApplicationInstance.CompleteRequest () [duplicado]
Esta questão já tem uma resposta aqui:
O Response.End () é considerado prejudicial? 8 respostasOs usuários do nosso aplicativo baixam um anexo pelo menos uma vez em dois segundos durante o dia.
Cenário Anterior:
Estávamos usando Response.End () para interromper a conexão com o cliente depois que o usuário faz o download de um anexo. Como estávamos com problemas de desempenho, começamos a registrar exceções e uma das mais repetidas foi a exceção de anulação de segmento. Como estamos recebendo o anexo de um serviço da Web, precisamos fazer algumas limpezas e limpamos o bloco try-catch-finally. Depois de alguma pesquisa, eu entendi que qualquer código após Response.End () não será executado mesmo se estiver no bloco finally. Isso esta certo?
Cenário Atual:
Eu li o segmento no estouro de pilha sobre Response.End () sendo prejudicial e ele precisa ser usado somente quando é realmente necessário, então eu decidi usar HttpContext .... CompleteRequest () em vez disso. Com esse código, a limpeza necessária é feita, mas o html processado está sendo anexado ao anexo baixado. Eu tentei substituir o Render e RaisePostBackEvent sugerido no mesmo artigo, mas o problema ainda persiste. Qualquer ideia sobre como resolver esse problema seria útil.
Código:
HttpContext.Current.Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.AddHeader("Content-Disposition", "attachment; filename=" +
filename);
Response.AddHeader("Content-Length", fileContent.Length.ToString());
Response.ContentType = "application/octet-stream";
Response.BinaryWrite(fileContent);
Response.Flush();