红隼错误:地址已在使用中(dotnet核心)

时间:2017-01-14 19:01:22

标签: c# asp.net linux .net-core kestrel-http-server

摘要:它适用于dotnet run,但它不能用作dotnet myappname.dll

我的linux技能有限,但是我想读完这本书,所以我不要混淆(在Scott Hanselman的this tutorial之后):

$ cd /home/myusername/dotnettest
$ dotnet run
  

现在聆听:http://localhost:5123

然后我把它移动到/ var就像这样:

$ sudo cp -a /home/myusername/dotnettest/bin/Debug/netcoreapp1.1/publish /var/dotnettest

最后,我测试它是否也适用于那里:

$ dotnet dotnettest.dll

然后它失败了:

info: Microsoft.Extensions.DependencyInjection.DataProtectionServices[0]
      User profile is available. Using '/home/myusername/.aspnet/DataProtection-Keys' as key repository; keys will not be encrypted at rest.

Unhandled Exception: System.AggregateException: One or more errors occurred. (Error -98 EADDRINUSE address already in use) ---> Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvException: Error -98 EADDRINUSE address already in use
   at Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv.Check(Int32 statusCode)
   at Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvTcpHandle.GetSockIPEndPoint()
   at Microsoft.AspNetCore.Server.Kestrel.Internal.Http.TcpListener.CreateListenSocket()
   at Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Listener.<>c.<StartAsync>b__6_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 Microsoft.AspNetCore.Server.Kestrel.Internal.KestrelEngine.CreateServer(ServerAddress address)
   at Microsoft.AspNetCore.Server.Kestrel.KestrelServer.Start[TContext](IHttpApplication`1 application)
   at Microsoft.AspNetCore.Hosting.Internal.WebHost.Start()
   at Microsoft.AspNetCore.Hosting.WebHostExtensions.Run(IWebHost host, CancellationToken token, String shutdownMessage)
   at Microsoft.AspNetCore.Hosting.WebHostExtensions.Run(IWebHost host)
   at WebApplication.Program.Main(String[] args) in /home/myusername/dotnettest/Program.cs:line 27
Aborted (core dumped)

我一直小心翼翼地试图阻止nginx。

我已经检查过是否正在侦听:5123,命令:

$ lsof -i tcp:5123

似乎没有任何事情发生。

4 个答案:

答案 0 :(得分:7)

以下命令可帮助您找到端口并杀死进程

在Mac上的终端

找到进程号

lsof -i: <port number>

例如lsof -i:5001

然后杀死进程号

kill -9 <process number>

例如-杀死-9 1600

答案 1 :(得分:1)

事实证明,在更改Program.cs配置以侦听后,它未正确重建:5123。发布的版本使用的是:5000而不是:5123。

同时,端口:5000正由另一个dotnet进程使用(我通过sudo netstat -ltp找到并随后被杀死)。这就是为什么错误是“地址已经在使用中”。在杀死进程后,dotnet dotnettest.dll运行正常,但是在端口:5000(不是:5123)。

然后我确保项目已正确重建,我删除了/publish文件夹以防万一,然后dotnet publish。重要提示:我必须手动将hosting.json复制到内置文件夹(之后也会复制到发布文件夹)。现在它正在听:5123。

步骤:

  • 使用sudo netstat -ltp确保您没有任何其他进程正在侦听默认端口(:5000)。
  • 确保项目已正确重建,并包含监听的新配置:5123(为此,您必须在项目中包含hosting.json,因此在构建和发布时复制它。)

答案 2 :(得分:0)

就我而言,使用ASP.NET CORE 3.1,我的应用足以写端口号,并且我确认未使用该端口号。抛出异常是因为我在应用程序的heroku版本中使用了ListenAnyIP(),但是当我在反向代理后面部署该应用程序时,由于该端口没有打开,我的防火墙被踢了。 >

答案 3 :(得分:0)

在 linux/mac

ps aux | grep "dotnet"

找到进程然后运行

kill -9 <process_id>