Los usuarios de nuestra aplicación descargan un archivo adjunto al menos una vez en dos segundos durante el día.Response.End() vs HttpContext.Current.ApplicationInstance.CompleteRequest()
escenario anterior:
Estábamos usando Response.End() para cancelar la conexión con el cliente después de que el usuario descarga un archivo adjunto. Como teníamos problemas de rendimiento, comenzamos a registrar excepciones y una de las más repetidas fue la excepción de aborto de subprocesos. Como recibimos el archivo adjunto de un servicio web, tenemos que hacer algunas tareas de limpieza y tuvimos la limpieza en el bloque try-catch-finally. Después de algunas investigaciones, he entendido que cualquier código después de Response.End() no se ejecutará aunque esté en el bloque finally. ¿Está bien?
Escenario actual:
he leído el hilo de desbordamiento de pila sobre Response.End() que es perjudicial y que tiene que ser utilizado sólo cuando sea realmente necesario, por lo que decidió utilizar HttpContext ... .CompleteRequest() en su lugar. Con este código, se realiza la limpieza necesaria, pero el html que se procesa se agrega al archivo adjunto descargado. Traté de sobreescribir el Render y el RaisePostBackEvent sugeridos en el mismo artículo, pero el problema aún persiste. Cualquier idea sobre cómo resolver este problema sería ú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();
No coloque los títulos con "C#" y tal. Para eso son las etiquetas. –
Sure. Lo siento por eso. Acabo de empezar a publicar aquí. Me aseguraré de no repetir eso. – user1396468