2011-02-10 36 views
8

için iptal edilmiş bir istek tespit edin ASP.NET MVC'de bir zaman uyumsuz denetleyicide, istemcinin isteği iptal edilip edilmediğini/anladığını anlamanın bir yolu var mı? çok temel bir test bakıldığındaASP.NET MVC

HttpContext.Current.Response.IsClientConnected 

kullanma hakkında bu durduruldu ajax istekleri için çalışmak görünmüyor ne

[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

[ASP.NET MVC zaman uyumsuz istemci bağlantı kesme algılama] olası yinelenen (http://stackoverflow.com/questions/4772597/detecting-async-client-disconnect-in-asp- net-mvc) Ben de bunu buldum, diğer bazı bilgilerle de sorunuzu yanıtlıyor. –

cevap

8

. MSDN, bunun olması gerektiğini öne sürüyor.

+0

Döngüleri içeride iken Döngü bağlamları içinde kullanıyorum ve mükemmel bir şekilde çalışıyor, bir yanıtı sonlandırmadan önce süreçleri, akışları veya önbelleğe alınmış dosyaları atmanıza izin veriyor. –

+0

Bunun, kaçırılmış AJAX istekleri için çalıştığını, ancak Fiddler'in neler olup bittiğini izlediğini görmedim! Fiddler'ı neredeyse her zaman kullanıyorum, bu yüzden bunu anlamak biraz zaman aldı. jQuery kullanıyorum. Var myRequest = $ .post (...); ', kısa bir süre sonra myRequest.abort();' – teedyay

2

deneyin

CancellationToken clientDisconnectedToken = HttpContext.Response.ClientDisconnectedToken;