.NET HttpClient зависает после нескольких запросов (если Fiddler не активен)

Я использую System.Net.Http.HttpClient отправить последовательность запросов из консольного приложения в REST API и десериализовать ответы JSON в строго типизированные объекты. Моя реализация такова:

using (var client = new HttpClient())
{
    var content = new StringContent(data, Encoding.UTF8, "text/html");
    var response = client.PostAsync(url, content).Result;

    response.EnsureSuccessStatusCode();

    return response.Content.ReadAsAsync<MyClass>().Result;
}

Однако я столкнулся с проблемой, очень похожей на проблему, описанную в этом вопросе, когда все работает нормально, когда запросы маршрутизируются через Fiddler, но зависает после 4-го или 5-го запроса, когда Fiddler отключен.

Если причина проблемы та же, я предполагаю, что мне нужно сделать что-то еще с HttpClient заставить его полностью освобождать свои ресурсы после каждого запроса, но я не могу найти примеры кода, которые показывают, как это сделать.

Надеюсь, кто-то может указать мне в правильном направлении.

Большое спасибо,

Тим

1 ответ

Решение

Вы не избавляетесь от HttpResponseMessage объект. Это может оставить открытые потоки на сервере, и после заполнения некоторой квоты потоков на отдельном сервере запросы больше не будут отправляться.

using (var client = new HttpClient())
{
    var content = new StringContent(data, Encoding.UTF8, "text/html");
    using(var response = client.PostAsync(url, content).Result)
    {    
        response.EnsureSuccessStatusCode();
        return response.Content.ReadAsAsync<MyClass>().Result;
    }
}
Другие вопросы по тегам