Исключение сокета при выполнении вызовов Http - PullRequest
1 голос
/ 02 июля 2019

У меня есть функция Azure (v2), запускаемая BLOB-объектами, размещенная в App Service plan(S3). Функция обрабатывает файл json и создает Http calls для API, предоставляемых в службе управления API.

Я использую HttpClient для совершения Http звонков. Хотя это работает нормально в одной среде с такой же настройкой, это происходит сбой при выполнении http-вызовов в другой среде.

Исключение:

System.Net.Sockets.SocketException с сообщением об ошибке «Операция была отменена. Невозможно прочитать данные из транспортного соединения: операция ввода-вывода была прервана из-за выхода из потока или из-за запроса приложения. Операция ввода-вывода была прервана из-за выхода из потока или из-за Запрос заявки "

Быстрое поиск в Google показал, что это может произойти из-за избыточных http-соединений. Подробнее здесь:

https://docs.microsoft.com/en-us/azure/azure-functions/manage-connections#connections-limit

Решением было использование статического HttpClient или масштабирование плана обслуживания приложения. Я сделал оба, только чтобы понять, что это все еще терпит неудачу за тем же исключением.

Кто-нибудь сталкивался с этой проблемой?

Любые идеи будут полезны.

Редактировать: вот код, который делает 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;
            }
        }
    }

1 Ответ

0 голосов
/ 02 июля 2019

Из внутренних журналов есть только выполнение и, к сожалению, неудачное.

Сведения об исключении

Метка времени: 02.07.2009 6:49:55 Тип внутреннего исключения: 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

Пожалуйста, дайте мне знать, если в UTC есть какая-либо дата и время, когда вы наблюдаете

System.Net.Sockets.SocketException

...