Dado un controlador asíncrono:Detección de desconexión de un cliente asíncrono en ASP.NET MVC
public class MyController : AsyncController
{
[NoAsyncTimeout]
public void MyActionAsync() { ... }
public void MyActionCompleted() { ... }
}
Supongamos MyActionAsync
arranca un proceso que toma varios minutos. Si el usuario ahora va a la acción MyAction
, el navegador esperará con la conexión abierta. Si el usuario cierra su navegador, la conexión se cierra. ¿Es posible detectar cuándo ocurre eso en el servidor (preferiblemente dentro del controlador)? ¿Si es así, cómo? Intenté reemplazar a OnException
, pero eso nunca se dispara en este escenario.
Nota: hago apreciar las respuestas útiles a continuación, pero el aspecto clave de esta pregunta es que estoy usando un AsyncController
. Esto significa que las solicitudes HTTP siguen abiertas (son de larga vida como COMET o BOSH) lo que significa que es una conexión de socket en vivo. ¿Por qué no se puede notificar al servidor cuando finaliza la conexión en vivo (es decir, "restablecimiento de conexión por pares", el paquete TCP RST)?
Para mí, obtuve el token de cancelación a través de System.Web.HttpContext.Current.Response.ClientDisconnectedToken – Tony
Me pregunto cómo hacer que funcione con la aplicación autohospedada de OWIN. – greatvovan