Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

198
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda