Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

197
Vistas
¿Qué sucede cuando se pierde la conexión durante la ejecución de la acción en el controlador?

Imagine que estamos llamando a las API REST dentro de nuestra acción, todas ellas cambiando el estado de algo, y entre estas líneas, finaliza la conexión del cliente.

En la imagen, estamos cargando una gran cantidad de datos del almacenamiento para devolverlos como una transmisión (conozco una mala práctica), y dentro de esta línea termina la conexión.

Finalmente, con la imagen, devolvemos una transmisión con una película de 1 GB de nuestra acción que (la transmisión) maneja toda la lectura y devolución interna, y se pierde la conexión.

¿Lo que sucede?

¿Tendremos una excepción lanzada? ¿Tendremos todo el código ejecutado y el resultado enviado a dev/null?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Cuando finaliza la conexión del cliente, se invocará el token de cancelación asociado con la solicitud. Si toma un CancellationToken como argumento para su acción, puede usarlo para detectarlo y cancelar la acción de cualquier manera que considere apropiada para su caso de uso. De lo contrario, su acción continuará ejecutándose como si nada hubiera pasado.

Por lo general, la acción del controlador devuelve un objeto "Resultado" que sabe cómo manejar el envío de datos al cliente. En un escenario de transmisión, su resultado sería un objeto que transmite datos al cliente. Esto ocurre fuera del tiempo de vida de la acción del controlador (después de que la acción haya regresado). Si una conexión muere (ya sea con el cliente o desde la fuente) mientras el resultado de la transmisión está en curso, se genera una excepción. No recuerdo más detalles. Esperemos que alguien más pueda proporcionar una respuesta más completa.

over 4 years ago · Santiago Trujillo Denunciar

0

Como describe @StriplingWarrior, dentro del método de acción de sus controladores, depende de verificar la propiedad IsCancellationRequested del CancellationToken pasado y decidir qué tipo de resultado devolver.

Cuando un cliente se desconecta mientras ya está escribiendo en el flujo de salida, se lanzará una OperationCanceledException . Esto ocurre fuera del controlador, dentro de una clase derivada de FileResult , por ejemplo, FileContentResult .

El código fuente de ASP.NET Core que maneja la transmisión/escritura de un archivo en el flujo de salida, se ocupa de esto al detectar esta excepción y anular la conexión.

Observe los comentarios en el código fuente original.

 internal static async Task WriteFileAsync(HttpContext context, Stream fileStream, RangeItemHeaderValue? range, long rangeLength) { // ... using (fileStream) { try { // ... } catch (OperationCanceledException) { // Don't throw this exception, it's most likely caused by the client disconnecting. // However, if it was cancelled for any other reason we need to prevent empty responses. context.Abort(); } } }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda