#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/2315. И последнее, но не менее важное: вы можете следовать последнему комментарию: и попробуйте поставить
UseIISIntegration()
послеUseUrls
, вот такUseUrls("http://*:5000").UseIISIntegration()
, и если вы не планируете когда-либо размещать его на IIS, вы также можете полностью удалить его