Я столкнулся с проблемой, когда время от времени (возможно, один раз в неделю) я замечал, что запрос от 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