2014-05-13 19 views
10

używam metody async w moich kontrolerami WebAPI:Konfiguracja limit czasu żądania dla kontrolerów WebAPI

public async Task<HttpResponseMessage> SampleMethod(int subscriptionNumber, DateTime departureDate) 
{ 
    // [...] 
} 

Jak skonfigurować limit czasu żądania się? Operacja może zająć do kilku minut i muszę się upewnić, że żądanie nie zostanie przekroczone.

W MVC znajduje się atrybut o nazwie [AsyncTimeout]. Czy istnieje odpowiednik w WebApi? Czy można go skonfigurować globalnie?

Odpowiedz

7

Dobre pytanie, chciałbym polecić do obsługi to od strony klienta - zawsze można określić ustawienia limitu czasu w kodzie konsumenta, nawet jeśli jest to ajax:

$.ajax({ 
url: "/ajax_json_echo/", 
timeout: 1000, 
... 
+1

Mówisz, że IIS/ASP.NET/WebApi2 nie ma żadnych wbudowanych limitów czasu? – jgauffin

+2

Tak, nie mają one nic do tej pory. WebAPI obsługuje tokeny anulowania, aby anulować operację, aby można było spróbować użyć funkcji AnulowanieTokenSource.CancelAfter, aby to osiągnąć, ale jak już wspomniałem - z konsumpcyjnego kodu –

+1

Również poniższy fragment ujawnia nieco więcej, dlaczego: "Sposób anulowania żądań HTTP jest aby anulować je bezpośrednio w HttpClient, ponieważ wiele żądań może ponownie wykorzystywać połączenia TCP w jednym HttpClient, więc nie można bezpiecznie anulować pojedynczego żądania, nie wpływając również na inne żądania. " –