ClientFactory http клиент запрос застрял - PullRequest
0 голосов
/ 14 марта 2019

Я занимаюсь разработкой основного приложения .net. Я пытаюсь использовать IHttpClientFactory, чтобы получить HttpClient. Выясняю, что иногда для некоторых запросов застревает метод GetAsync. В тот же момент, если я использую новый HttpClient (), он отлично работает

URL:

https://i.mycdn.me/image?id=879381309947&t=33&plc=API&aid=1246413312&tkn=*6UWxsdoE8PBzmpmnySW2C9DI064

Это застряло

 HttpClient client = ClientFactory.CreateClient();
                client.Timeout = TimeSpan.FromMilliseconds(FileStorageOptions.RequestRemoteImageTimoutMilliseconds);
                var response = await client.GetAsync(uri);

                if (response.IsSuccessStatusCode) return await response.Content.ReadAsByteArrayAsync();

                return null;

Это прекрасно работает:

using (var client2 = new HttpClient() { Timeout = TimeSpan.FromMilliseconds(FileStorageOptions.RequestRemoteImageTimoutMilliseconds) })
                using (var result = await client2.GetAsync(uri))
                {
                    if (result.IsSuccessStatusCode)
                        return await result.Content.ReadAsByteArrayAsync();
                    return null;
                }

Как это исправить?

1 Ответ

0 голосов
/ 15 марта 2019

Я могу запустить этот код в консольном приложении .NET Core без проблем:

static async Task Main(string[] args)
{
    var services = new ServiceCollection().AddHttpClient().BuildServiceProvider();
    var clientFactory = services.GetRequiredService<IHttpClientFactory>();

    var client = clientFactory.CreateClient();
    client.Timeout = TimeSpan.FromSeconds(10);
    var response = await client.GetAsync("https://i.mycdn.me/image?id=879381309947&t=33&plc=API&aid=1246413312&tkn=*6UWxsdoE8PBzmpmnySW2C9DI064");

    if (response.IsSuccessStatusCode)
    {
        var result = await response.Content.ReadAsByteArrayAsync();
    }
}
...