.NET Core Web Api 错误 -4090 EADDRNOTAVAIL 地址在 Azure 上不可用

Posted

技术标签:

【中文标题】.NET Core Web Api 错误 -4090 EADDRNOTAVAIL 地址在 Azure 上不可用【英文标题】:.NET Core Web Api Error -4090 EADDRNOTAVAIL address not available on Azure 【发布时间】:2017-10-12 10:18:48 【问题描述】:

我有一个在本地运行良好的 .NET Core 1.1 Web Api 项目。一旦我将它部署到 Azure 上的 AppService,它就不会响应任何 GET 请求——它们都会超时。我有一个开放的 ping 端点,它只返回当前日期和时间,但没有响应。查看日志我看到了这一点:

[INF] Azure Web Sites environment detected. Using '"D:\home\ASP.NET\DataProtection-Keys"' as key repository; keys will not be encrypted at rest. (383ad3af)
[WRN] Unable to bind to http://localhost:22676 on the IPv6 loopback interface. (de7f78a0)
System.AggregateException: One or more errors occurred. (Error -4090 EADDRNOTAVAIL address not available) ---> Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvException: Error -4090 EADDRNOTAVAIL address not available
   at Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv.tcp_bind(UvTcpHandle handle, SockAddr& addr, Int32 flags)
   at Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvTcpHandle.Bind(ServerAddress address)
   at Microsoft.AspNetCore.Server.Kestrel.Internal.Http.TcpListener.CreateListenSocket()
   at Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Listener.<StartAsync>b__8_0(Object state)
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
   at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
   at System.Threading.Tasks.Task.Wait()
   at Microsoft.AspNetCore.Server.Kestrel.Internal.KestrelEngine.CreateServer(ServerAddress address)
   at Microsoft.AspNetCore.Server.Kestrel.KestrelServer.Start[TContext](IHttpApplication`1 application)
---> (Inner Exception #0) Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvException: Error -4090 EADDRNOTAVAIL address not available
   at Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv.tcp_bind(UvTcpHandle handle, SockAddr& addr, Int32 flags)
   at Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvTcpHandle.Bind(ServerAddress address)
   at Microsoft.AspNetCore.Server.Kestrel.Internal.Http.TcpListener.CreateListenSocket()
   at Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Listener.<StartAsync>b__8_0(Object state)<---

我不确定为什么会发生这种情况以及如何解决它。

编辑:这是 Program.cs

public static void Main(string[] args)
    
        var configuration = new ConfigurationBuilder()
            .AddEnvironmentVariables()
            .AddCommandLine(args)
            .Build();

        var host = new WebHostBuilder()
            .ConfigureLogging(options => options.AddConsole())
            .ConfigureLogging(options => options.AddDebug())
            .UseConfiguration(configuration)
            .UseIISIntegration()
            .UseKestrel(options =>
            
                options.ThreadCount = 1;
            )
            .UseStartup<Startup>()
            .Build();

        host.Run();
    

【问题讨论】:

显示如何配置主机(默认情况下 - Program.cs 文件中的“Main”方法)。你在那里添加了“.UseAzureAppServices()”吗? 添加了 Program.cs。我没有使用 UseAzureAppServices()。这是必需的吗? 我添加了依赖项并包含了对 UseAzureAppServices() 的调用,但没有任何区别。 【参考方案1】:

在 ASP.NET Core 2.0 中遇到了同样的问题。明确指定主机将监听的 url:

public static IWebHost BuildWebHost(string[] args)

    return WebHost
                .CreateDefaultBuilder(args)
                .UseUrls("http://+:22676") // <--add urls
                .UseStartup<Startup>()
                .Build();

【讨论】:

解决方案有效,但请解释当我们明确指定网址时发生的情况 @ManishJain 默认 asp.net 核心绑定到 localhost:5000。 UseUrls 可以更改此绑定 - docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/…【参考方案2】:

这变成了我的防火墙的问题。日志中的消息只是一个警告,似乎不会干扰正常处理。

【讨论】:

以上是关于.NET Core Web Api 错误 -4090 EADDRNOTAVAIL 地址在 Azure 上不可用的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core Web API - JWT 消息处理程序 - 没有注册类型错误

带有 Javascript 的 Dot Net Core Web API - CORS 策略错误

Postman 收到简单的 ASP.NET Core Web API 的 404 错误

Azure AD 身份验证 401 错误“受众无效” AddAzureADBearer .Net Core Web Api

.NET Core Web Api 错误 -4090 EADDRNOTAVAIL 地址在 Azure 上不可用

从 ASP.NET MVC 项目调用 .NET CORE 5 Web API 微服务时无法检索 BadRequest 错误