Мы используем IHTTPClientFactory для подключения к внешней службе, используя следующий код:
Код: Выделить всё
--register service
services.AddHttpClient("NoProxy")
.ConfigurePrimaryHttpMessageHandler(() =>
{
return new HttpClientHandler
{
UseProxy = false,
Proxy = null
};
});
--g2g function
public async Task GetResponseUsingFactory(CitizenReq request)
{
var json = JsonConvert.SerializeObject(request);
var data = new StringContent(json, Encoding.UTF8, "application/json");
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
ServicePointManager.ServerCertificateValidationCallback =
delegate (object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
return true; // Always accept
};
var client = _httpClientFactory.CreateClient("NoProxy");
client.DefaultRequestHeaders.Add("user_key", _apiKey);
//client.DefaultRequestHeaders.ConnectionClose = _keep_alive;
client.DefaultRequestHeaders.Add("Connection", _connection);
_logger.LogInformation($"API request : {JsonConvert.SerializeObject(request)}");
var response = new HttpResponseMessage();
response = await _retryPolicy.JustHttpRetry.ExecuteAsync(() =>
client.PostAsync($"{_g2gUrl}/api/validateCitizenData", data));
if (response.IsSuccessStatusCode)
{
var result = await response.Content.ReadAsStringAsync();
_logger.LogInformation($"API response : {JsonConvert.SerializeObject(response)}");
return JsonConvert.DeserializeObject(result,
new JsonSerializerSettings() { MissingMemberHandling = MissingMemberHandling.Ignore })!;
}
else
{
//send email
await FailedNotification();
throw new Exception("G2G API is down");
}
}
1 — мы провели расследование и выяснили, что заголовок соединения не установлен на закрытие. фабрика клиента, похоже, не может предоставить его сеансу, хотя мы это явно запрограммировали.
2-Мы пытались установить время простоя для http-соединений в IIS на 1 минута, чтобы не оставлять соединение открытым, но, похоже, это ни к чему не приводит.
у кого-нибудь есть идеи, что мы можем исследовать дальше?
Подробнее здесь: https://stackoverflow.com/questions/791 ... st-request