Saltar al contenido

¿Response.End() se considera dañino?

Esta es el arreglo más válida que te podemos dar, pero primero estúdiala detenidamente y analiza si se puede adaptar a tu trabajo.

Solución:

TL;DR

Inicialmente, le recomendé que simplemente reemplazara todas sus llamadas a
[Response.End] con […] CompleteRequest() llama, pero si desea evitar el procesamiento de devolución de datos y la representación html, deberá agregar […] anula también.

Jon Reid, “Análisis final”


Según MSDN, Jon Reid y Alain Renon:

Rendimiento de ASP.NET – Gestión de excepciones – Escribir código que evite las excepciones

Los métodos Server.Transfer, Response.Redirect, Response.End generan excepciones. Cada uno de estos métodos llama internamente a Response.End. La llamada a Response.End, a su vez, provoca una excepción ThreadAbortException.

Solución ThreadAbortException

HttpApplication.CompleteRequest() establece una variable que hace que el hilo pase por alto la mayoría de los eventos en la canalización de eventos de HttpApplication [–] no la cadena de eventos de la página sino la cadena de eventos de la aplicación.

cree una variable de nivel de clase que marque si la página debe terminar y luego verifique la variable antes de procesar sus eventos o representar su página. […]
Recomendaría simplemente anular los métodos RaisePostBackEvent y Render

Response.End y Response.Close no se usan en condiciones normales procesamiento de solicitudes cuando el rendimiento es importante. Response.End es un medio práctico y complicado de terminar el procesamiento de solicitudes con una penalización de rendimiento asociada. Response.Close es para la terminación inmediata de la respuesta HTTP en el nivel de IIS/socket y causa problemas con cosas como KeepAlive.

El método recomendado para finalizar una solicitud ASP.NET es HttpApplication.CompleteRequest. Tenga en cuenta que la representación de ASP.NET deberá omitirse manualmente, ya que HttpApplication.CompleteRequest omite el resto de la canalización de la aplicación IIS/ASP.NET, no la canalización de la página ASP.NET (que es una etapa en la canalización de la aplicación).


Código

Copyright © 2001-2007, C6 Software, Inc lo mejor que pude ver.


Referencia

HttpApplication.CompleteRequest

Hace que ASP.NET omita todos los eventos y el filtrado en la cadena de ejecución de canalización HTTP y ejecute directamente el evento EndRequest.

Respuesta.Fin

Este método es proporcionado solo por compatibilidad con ASP—es decir, por compatibilidad con la tecnología de programación web basada en COM que precedió a ASP.NET.precedió a ASP.NET. [Emphasis added]

Respuesta.Cerrar

Este método termina la conexión con el cliente de manera abrupta y es
no está diseñado para el procesamiento normal de solicitudes HTTP. [Emphasis added]

Esta pregunta aparece cerca de la parte superior de todas las búsquedas de Google para obtener información sobre response.end, por lo que para otras búsquedas como la mía que desean publicar CSV/XML/PDF, etc. en respuesta a un evento sin renderizar toda la página ASPX, así es como lo hago. . (anular los métodos de renderizado es demasiado complejo para una tarea tan simple en mi opinión)

// Add headers for a csv file or whatever
Response.ContentType = "text/csv"
Response.AddHeader("Content-Disposition", "attachment;filename=report.csv")
Response.AddHeader("Pragma", "no-cache")
Response.AddHeader("Cache-Control", "no-cache")

// Write the data as binary from a unicode string
Dim buffer As Byte()
buffer = System.Text.Encoding.Unicode.GetBytes(csv)
Response.BinaryWrite(buffer)

// Sends the response buffer
Response.Flush()

// Prevents any other content from being sent to the browser
Response.SuppressContent = True

// Directs the thread to finish, bypassing additional processing
HttpContext.Current.ApplicationInstance.CompleteRequest()

Si ha empleado un registrador de excepciones en su aplicación, se diluirá con el ThreadAbortExceptions de estos benignos Response.End() llamadas Creo que esta es la forma en que Microsoft dice “¡Ya basta!”.

yo solo usaria Response.End() si existiera alguna condición excepcional y no fuera posible otra acción. Tal vez entonces, registrar esta excepción podría indicar una advertencia.

Recuerda algo, que te concedemos agregar una reseña si te fue de ayuda.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *