2016-04-13 2 views
2

я следующий метод в мой контроллер Web API (длинные методы погонных честь отмены лексемы, то есть они не будут работать, если аннулирование было предложено):Может ли клиент отменить запрос Web Api?

public async Task<IHttpActionResult> ApiMethod(CancellationToken cancellationToken) 
{ 
    await LongRunningNetworkOperation1(cancellationToken); 
    await LongRunningNetworkOperation2(cancellationToken); 

    return Ok(); 
} 

Клиент имеет следующий код для вызова мой веб-контроллер апи:

using (var httpClient = new HttpClient()) 
{ 
    httpClient.Timeout = TimeSpan.FromMilliseconds(3000); 

    try 
    { 
     // Sending DELETE request 
     HttpResponseMessage deleteMessage = await httpClient. 
          DeleteAsync("http://localhost:80/api/apiMethod"); 
    } 
    catch (Exception e) 
    { 
     // Timeout occurred. 
    } 
} 

Если время запроса клиента перед «LongRunningNetworkOperation2» называется, будет CancellationToken предотвратить «LongRunningNetworkOperation2» от бега? Другими словами, может ли клиент сигнализировать веб-api, чтобы остановить выполнение определенного запроса?

ответ

2

может ли клиент сигнализировать веб-api, чтобы остановить выполнение определенного запроса?

Теоретически, да. Отмена HttpClient должна закрыть базовое соединение TCP/IP. В ответ стек ASP.NET должен обнаружить потерю своего клиента и отменить WebAPI CancellationToken.

На практике это зависит от того, насколько полно реализованы версии HttpClient и WebAPI. Отмена не обязательно гарантирована, но я ожидаю, что она будет работать хотя бы для рабочего стола HttpClient.

+0

Знаете ли вы о каком-либо месте, где это конкретное поведение отмены документировано? – Nick

+0

@Nick: поиск на сайте asp.net не работает прямо сейчас, поэтому я не уверен, действительно ли он официально зарегистрирован или нет. –

Смежные вопросы