Ошибка -98 адрес электронной почты, который уже используется в Ubuntu

#ubuntu #asp.net-core #.net-core

#ubuntu #asp.net-core #.net-ядро

Вопрос:

Я просто создан простым.Проект NET core webapi, использующий https://github.com/omnisharp/generator-aspnet

Затем пытаюсь запустить приложение в подсистеме Ubuntu.

При запуске dotnet start я получаю сообщение об ошибке:

 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.TcpListenerPrimary.CreateListenSocket()
   at Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Listener.<>c.<StartAsync>b__6_0(Object state)
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ListenerPrimary.<StartAsync>d__11.MoveNext()
   --- 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](IHttpApplication1 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 WebApp.Program.Main(String[] args)
  

Однако, когда я запускаю приложение только в Windows, используя ту же команду в cmd , все работает просто отлично.

Есть мысли, как это исправить? WebAPI использует порт 5000 по умолчанию.

Обновить:

Я просто указываю встроенный порт по умолчанию, используя .UseUrls("http://*:5000")

 var host = new WebHostBuilder()
                .UseConfiguration(config)
                .UseKestrel()
                .UseContentRoot(Directory.GetCurrentDirectory())
                .UseIISIntegration()
                .UseStartup<Startup>()
                .UseUrls("http://*:5000")
                .Build();
  

Так что теперь он просто работает нормально. Однако я не изменил значение порта.
Есть мысли, почему порт 5000 не работает в Ubuntu, когда он не был указан?

Комментарии:

1. Какой порт вы используете? И использует ли это порт другое приложение в вашем Linux?

2. @Tseng, только что обновил мой вопрос.

3. http: // *: 5000 позволяет использовать любые адреса IP4 и IP6 из любого интерфейса, поэтому, хотя он по-прежнему использует порт 5000, может быть использован другой адрес

4. Ах да. У меня однажды была похожая проблема, но я думал, что она уже исправлена. Однако он был у меня в службе приложений Azure, поскольку он пытался привязаться к IPv4 и IPv6. Вы пытались выполнить привязку к http://0.0.0.0:5000 , а не к http://*:5000 ? Проблема с GitHub github.com/aspnet/KestrelHttpServer/issues/766 и связанная с этим проблема github.com/aspnet/KestrelHttpServer/issues/231

5. И последнее, но не менее важное: вы можете следовать последнему комментарию: и попробуйте поставить UseIISIntegration() после UseUrls , вот так UseUrls("http://*:5000").UseIISIntegration() , и если вы не планируете когда-либо размещать его на IIS, вы также можете полностью удалить его