Je dispose d'une fonction azur déclenchée par un blob (v2) hébergée chez App Service plan(S3)
. La fonction traite un fichier json et fait Http calls
aux API exposées dans le service de gestion des API.
J'utilise HttpClient
de faire Http
appels. Bien que cela fonctionne bien dans un environnement avec la même configuration, cela échoue lors des appels http post dans un autre environnement.
L'exception :
System.Net.Sockets.SocketException
avec un message d'erreur "L'opération a été annulée. Impossible de lire les données à partir de la connexion de transport : L'opération d'E/S a été interrompue en raison de la sortie d'un thread ou d'une demande de l'application. L'opération d'E/S a été interrompue en raison de la sortie d'un thread ou d'une demande de l'application".
Une rapide recherche sur Google m'a révélé que cela pouvait se produire en raison d'un excès de connexions http. Plus de détails ici :
https://docs.microsoft.com/en-us/azure/azure-functions/manage-connections#connections-limit
La solution a consisté à utiliser des HttpClient
ou de réduire le plan de service d'App. J'ai fait les deux pour me rendre compte qu'il échoue toujours avec la même exception.
Quelqu'un a-t-il rencontré ce problème ?
Tout commentaire serait utile.
Edit : Voici le code qui fait l'appel http
public class ReportingService : IReportingService
{
private static readonly HttpClient _httpClient = new HttpClient();
private readonly ILogger _logger;
public ReportingService(ILogger<ReportingService> logger, IConfigurationRoot configuration)
{
_logger = logger;
_httpClient.BaseAddress = new Uri(configuration["ReportingServiceBaseUrl"]);
_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(Encoding.UTF8.GetBytes($"{configuration["APIUser"]}:{configuration["APIPassword"]}")));
}
public async Task<bool> RequestReport(string endpoint, StringContent httpContent)
{
try
{
var response = await _httpClient.PostAsync(endpoint, httpContent);
return response.IsSuccessStatusCode;
}
catch (Exception ex)
{
_logger.LogError(ex, "Migration failed");
throw;
}
}
}