HttpClient зависает на GetAsyn c для ERR_CONNECTION_REFUSED - PullRequest
0 голосов
/ 04 апреля 2020

Я пытаюсь получить статус веб-сайта в. NET Работающая служба Core 3.1 await client.GetAsync висит только на ERR_CONNECTION_REFUSED с хоста

Program.cs

public static IHostBuilder CreateHostBuilder(string[] args) =>
                Host.CreateDefaultBuilder(args)
               .UseWindowsService()
               .ConfigureServices((hostContext, services) =>
                    {
                        services.AddHostedService<Worker>();
                        services.AddHttpClient();
                    });

Рабочий конструктор

   public Worker(ILogger<Worker> logger, IConfiguration configuration, IHttpClientFactory clientFactory)
    {
        _logger = logger;
        _configuration = configuration;
        _clientFactory = clientFactory;
    }

и позже в рабочем в методе ExecuteAsyn c.

var client = _clientFactory.CreateClient();
var Siteresult = await client.GetAsync(_siteAdress);

ERR_CONNECTION_REFUSED с сервера - единственный способ избежать этой ошибки. Работник не восстанавливается. Мы реплицируем это, отключив сайт в IIS (когда мы отключаем пул приложений, мы получаем полезную информацию 503 и работаем хорошо), мы просматриваем сайт в chrome и получаем ERR_CONNECTION_REFUSED, но работник просто зависает. .

1 Ответ

0 голосов
/ 05 апреля 2020

В случае, если кому-то еще интересно, согласно документации документации использование try-catch требуется при асинхронном вызове

        bool siteDown=false;

        try
        {
            HttpResponseMessage response = await client.GetAsync(_siteAdress);
            response.EnsureSuccessStatusCode();

        }  
        catch(HttpRequestException e)
        {
            siteDown = true; 
            _logger.LogError("Message :{0} ", e.Message);

        }
...