HttpClientFactory прекращает делать запросы - PullRequest
0 голосов
/ 11 июня 2019

Я столкнулся с проблемой, когда время от времени (возможно, один раз в неделю) я замечал, что запрос от HttpClient не выполняется.

Процесс делает два запроса подряд каждые 5 с на24/5 базис.Первый - это POST, а второй - GET.Ошибка возникает только во втором запросе и повторяется каждый раз, когда выполняется этот цикл, т. Е. Каждые 5 с.

Сценарий c # принимает IHttpClientFactory (с использованием Microsoft.Extensions.Http v2.1.0) и использует именованный экземпляр дляизвлекать соответствующего клиента при каждом вызове.

var httpClient = HttpClientFactory.CreateClient("[named_instance]");

services.AddHttpClient("[named_instance]")
    .ConfigurePrimaryHttpMessageHandler(() =>
    {
        return new HttpClientHandler
        {
            UseCookies = false,
            UseDefaultCredentials = false
        };
    });

Метод POST

var httpClient = CreateClient();

httpClient.DefaultRequestHeaders.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

var body = $"[json here]";
var content = new StringContent(body, Encoding.UTF8, "application/json");

return await httpClient.PostAsync("[url_here]", content).ConfigureAwait(false);

Метод GET

var httpClient = CreateClient();

httpClient.DefaultRequestHeaders.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
httpClient.DefaultRequestHeaders.Add("Authorization", sessionId);

return await httpClient.GetAsync("[url_here]").ConfigureAwait(false);

Я включил подробное ведение журнала (для HttpClientFactory) и заметил разницу в выводе.

Работает

Calling Method1
Start processing HTTP request POST https://[url]/[method1]
Sending HTTP request POST https://[url]/[method1]
Received HTTP response after 22.4196ms - OK
End processing HTTP request after 69.3192ms - OK

Calling Method2
Start processing HTTP request GET https://[url]/[method2]
Sending HTTP request GET https://[url]/[method2]
Received HTTP response after 418.6451ms - OK
End processing HTTP request after 459.884ms - OK

Ошибка

Calling Method1
Start processing HTTP request POST https://[url]/[method1]
Sending HTTP request POST https://[url]/[method1]
Received HTTP response after 16.8932ms - OK
End processing HTTP request after 45.3336ms - OK

Calling Method2
No HTTP request made
...