Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

192
Views
¿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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!