2 votes

Exception de socket lors des appels Http

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;
            }
        }
    }

1voto

DixitArora-MSFT Points 1533

Dans les journaux du back-end, il n'y a qu'une exécution et malheureusement, c'est celle qui a échoué.

Détails de l'exception

Horodatage : 7/2/2019 6:49:55 AM Type d'exception interne : System.FormatException

Full Exception :
 System.FormatException : Invalid blob path specified : ''. Blob identifiers must be in the format 'container/blob'.
   at Microsoft.Azure.WebJobs.Host.Blobs.BlobPath.ParseAndValidate(String value,Boolean isContainerBinding) at C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Extensions.Storage\Blobs\BlobPath.cs : 53
   at Microsoft.Azure.WebJobs.Host.Blobs.Triggers.StringToCloudBlobConverter.ConvertAsync(String input,CancellationToken cancellationToken) at C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Extensions.Storage\Blobs\Triggers\StringToCloudBlobConverter.cs : 21
   at async Microsoft.Azure.WebJobs.Host.Blobs.BlobOutputConverter`1.TryConvertAsync[TInput](Object input,CancellationToken cancellationToken) at C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Extensions.Storage\Blobs\BlobOutputConverter.cs : 35
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at async Microsoft.Azure.WebJobs.Host.Converters.CompositeAsyncObjectToTypeConverter`1.TryConvertAsync[T](Object value,CancellationToken cancellationToken) at C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Host\Converters\CompositeAsyncObjectToTypeConverter.cs : 28
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at async Microsoft.Azure.WebJobs.Host.Blobs.Triggers.BlobTriggerBinding.BindAsync(Object value,ValueBindingContext context) at C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Extensions.Storage\Blobs\Triggers\BlobTriggerBinding.cs : 158
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at async Microsoft.Azure.WebJobs.Host.Indexers.FunctionIndexer.TriggerWrapper.BindAsync(Object value,ValueBindingContext context) at C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Host\Indexers\FunctionIndexer.cs : 475
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at async Microsoft.Azure.WebJobs.Host.Triggers.TriggeredFunctionBinding`1.BindCoreAsync[TTriggerValue](ValueBindingContext context,Object value,IDictionary`2 parameters) at C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Host\Triggers\TriggeredFunctionBinding.cs : 57

Veuillez me faire savoir s'il y a une date et une heure en UTC à laquelle vous observez

System.Net.Sockets.SocketException (exception)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X