Ошибки привязки адреса Kestrel в службе приложений Azure

У меня есть приложение aspnet core 2.2, которое выглядит так:

return WebHost.CreateDefaultBuilder(args)
    .ConfigureAppConfiguration((builderContext, config) =>
    {
        var env = builderContext.HostingEnvironment;

        config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
                .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);
    })
    .UseStartup<Startup>()
    .UseKestrel(options =>
    {
        options.ConfigureHttpsDefaults(opts =>
        {
            opts.ServerCertificate = GetCertificate();
            opts.ClientCertificateMode = ClientCertificateMode.RequireCertificate;
            opts.ClientCertificateValidation = CertificateValidator.DisableChannelValidation;
        });
    });

Все отлично работает локально. Однако при развертывании в службе приложений Azure я получаю следующее:

Unhandled Exception: System.IO.IOException: Failed to bind to address http://127.0.0.1:5000: address already in use

Есть ли что-то особенное, что мне нужно сделать по-другому здесь? Меня не особенно волнует использование Kestrel по сравнению с чем-либо еще, пока я могу выполнять аутентификацию клиентского сертификата (которая работает локально в моей текущей реализации).


person devlife    schedule 17.07.2019    source источник


Ответы (2)


Проблема оказалась в том, что приложение уже работало, но не принимало запросы из-за попытки использовать пустельгу в службе приложений Azure. Мне пришлось использовать .UseIIS(), чтобы заставить его работать. Возможно, я делал что-то не так.

person devlife    schedule 19.07.2019

Если вы уже знаете, какой порт у вашего приложения. будет постоянно использоваться, может иметь смысл просто закодировать это в своем приложении с помощью UseUrls:

.UseUrls(urls: "http://localhost:10000")

Или запустите dotnet run --urls="http://localhost:10000" как этот issue.

person Joey Cai    schedule 18.07.2019