2011-02-10 21 views
8

En un controlador asíncrono en ASP.NET MVC, ¿hay alguna forma de saber si el cliente anula la solicitud?Detectar una solicitud cancelada en ASP.NET MVC

[NoAsyncTimeout] 
public void IndexAsync() { 
    var source = new CancellationTokenSource(); 

    Task.Factory.StartNew(() => { 
    while (true) { 
     if (source.Token.IsCancellationRequested) { 
     AsyncManager.Finish(); 
     return; 
     } 

     Response.Write("."); 
     Thread.Sleep(1000); 
    } 
    }, source.Token); 

    // Is there any way to do this? 
    Request.Aborted += (sender, e) => source.Cancel(); 

    AsyncManager.OutstandingOperations.Increment(); 
} 
+1

posible duplicado de [Detección de desconexión de un cliente asíncrono en ASP.NET MVC] (http://stackoverflow.com/questions/4772597/detecting-async-client-disconnect-in-asp- net-mvc) Acabo de encontrar esto también, responde su pregunta también con otra información. –

Respuesta

8

Qué acerca del uso

HttpContext.Current.Response.IsClientConnected 

Desde una prueba muy básica no parece que esto funcione para peticiones Ajax abortados. MSDN sugiere que debería sin embargo.

+0

Lo estoy usando en contextos de sincronización dentro de while loops, y funciona perfectamente, lo que permite deshacerse de procesos, secuencias o archivos en caché antes de finalizar una respuesta. –

+0

Me parece que funciona para solicitudes AJAX abortadas, ¡pero no cuando Fiddler está monitoreando lo que está sucediendo! Yo uso Fiddler casi todo el tiempo, por lo que me tomó un tiempo detectarlo. Estoy usando jQuery. Digo 'var myRequest = $ .post (...);', seguido poco después por 'myRequest.abort();' – teedyay

2

Trate

CancellationToken clientDisconnectedToken = HttpContext.Response.ClientDisconnectedToken; 
Cuestiones relacionadas