fix: connexions HTTP sortantes robustes (BAN/ORS) — blocages intermittents
Les HttpClient vers l'API BAN et ORS réutilisaient des connexions TLS éventées par le pool .NET, provoquant des blocages jusqu'au timeout front de 10s (SocketException Operation canceled). Configuration d'un SocketsHttpHandler dédié avec PooledConnectionLifetime (2 min), PooledConnectionIdleTimeout (30s) et ConnectTimeout (5s). Resserre aussi le catch de ORSClient : une annulation provenant de l'appelant (CancellationToken du contrôleur) est désormais propagée telle quelle, au lieu d'être maquillée en timeout ORS.
This commit is contained in:
@@ -50,15 +50,19 @@ public class ORSClient : IORSClient
|
||||
{
|
||||
response = await _httpClient.PostAsJsonAsync(DirectionsGeoJsonPath, body, cancellationToken);
|
||||
}
|
||||
catch (OperationCanceledException ex) when (!cancellationToken.IsCancellationRequested)
|
||||
catch (OperationCanceledException) when (cancellationToken.IsCancellationRequested)
|
||||
{
|
||||
// Le HttpClient annule via son Timeout : OperationCanceledException est levée
|
||||
// sans que le jeton de l'appelant soit annulé -> il s'agit d'un dépassement de délai.
|
||||
throw new ORSTimeoutException(
|
||||
"L'appel à OpenRouteService a dépassé le délai imparti.", ex);
|
||||
// Annulation DEMANDÉE PAR L'APPELANT (ex. requête HTTP entrante annulée par le
|
||||
// client) : on propage l'annulation telle quelle. Ce n'est PAS un timeout ORS,
|
||||
// donc on ne la maquille pas en ORSTimeoutException et on ne déclenche pas le
|
||||
// fallback Haversine à tort.
|
||||
throw;
|
||||
}
|
||||
catch (TaskCanceledException ex)
|
||||
catch (OperationCanceledException ex)
|
||||
{
|
||||
// Jeton de l'appelant NON déclenché : l'annulation vient du Timeout propre au
|
||||
// HttpClient ORS -> dépassement de délai réel d'OpenRouteService. (TaskCanceledException
|
||||
// hérite d'OperationCanceledException : ce bloc couvre les deux.)
|
||||
throw new ORSTimeoutException(
|
||||
"L'appel à OpenRouteService a dépassé le délai imparti.", ex);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user