无法启动 Kestrel。System.IO.IOException:无法绑定到地址 http://127.0.0.1:5000:地址已在使用中

nav*_*100 9 linux centos7 .net-core asp.net-core asp.net-core-2.1

我按照此 URL 中的步骤将 .NET core 2.1 Web 应用程序代码发布到 Linux Centos 7 服务器。

https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-2.2

我试图运行“sudo dotnet application_name.dll”。我收到以下错误消息。我错过了什么吗?我在 Windows 机器上使用 Visual Studio 2017 发布代码并将代码复制到 Linux 服务器。

crit: Microsoft.AspNetCore.Server.Kestrel[0]
      Unable to start Kestrel.
System.IO.IOException: Failed to bind to address http://127.0.0.1:5000: address already in use. ---> Microsoft.AspNetCore.Connections.AddressInUseException: Address already in use ---> System.Net.Sockets.SocketException: Address already in use
Run Code Online (Sandbox Code Playgroud)

程序.cs

  public class Program
    {
        public static void Main(string[] args)
        {
            CreateWebHostBuilder(args).Build().Run();
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>();
    }
Run Code Online (Sandbox Code Playgroud)

启动.cs配置

 public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        app.UseStaticFiles();

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });

        app.UseForwardedHeaders(new ForwardedHeadersOptions
        {
            ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
        });
    }
Run Code Online (Sandbox Code Playgroud)

启动设置.json:

  "applicationUrl": "https://localhost:5001;http://localhost:5000"
Run Code Online (Sandbox Code Playgroud)

Par*_*rsa 84

重新启动此服务可能会解决问题:Windows 服务程序上的主机网络服务

  • 重新启动“主机网络服务”也为我解决了这个问题。 (20认同)
  • 也为我工作过。这应该被标记为已接受的答案。 (2认同)

小智 38

在管理员模式下转到 Powershell 并编写以下命令:

netsh interface ipv4 show excludedportrange protocol=tcp
Run Code Online (Sandbox Code Playgroud)

检查端口排除范围,您的端口是否属于此列表;如果是,则使用以下命令:

net stop winnat
net start winnat
Run Code Online (Sandbox Code Playgroud)

这个问题应该得到解决。


Pau*_*der 11

就我而言,我能够通过更改 Kestrel 使用的端口来解决此问题。这里有两个对我有用的选项(选择一个):

  1. 将“applicationUrl”设置添加到 launchSettings.json 文件(在 VS2019 的 Properties 文件夹下)。在下面的示例中使用“ https://localhost:5201 ”:

    "profiles": {
      "IIS Express": {
          ...
          "environmentVariables": {
            "ASPNETCORE_ENVIRONMENT": "Development"
          },
        "Host": {
          ...
        }
      },
      "Your.App.Namespace.Api": {
        ...
        "environmentVariables": {
          "ASPNETCORE_ENVIRONMENT": "Development"
        },
        "applicationUrl": "https://localhost:5201;http://localhost:5200"
      }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在 Program.Main() 中向 WebHostBuilder 添加“UseUrls”流畅的方法调用。即“ http://localhost:5200/ ”在下面的例子中:

    using (var host = new WebHostBuilder()
    .UseKestrel(o => o.Limits.KeepAliveTimeout = TimeSpan.FromMinutes(30))
    ...
    .UseStartup<Startup>()
    .UseUrls("http://localhost:5200/")
    
    Run Code Online (Sandbox Code Playgroud)


Sal*_*oni 10

发生这种情况是因为端口上已经有一个任务正在运行。

  1. 以管理模式打开cmd
  2. 运行 netstat -aon
  3. 查找不工作端口的 PID
  4. 杀死 PID 的进程。前 - taskkill /F /PID 5200


Jer*_*est 8

这对我的 Windows 10 有效

以管理员身份打开 CMD 提示符并运行:

net stop hns
net start hns
Run Code Online (Sandbox Code Playgroud)

通过端口终止进程,重新启动我的 Visual Studio,但没有解决我的问题。

  • 效果很好!谢谢 (2认同)