2017-01-14 14 views
2

Резюме: оно работает как dotnet run, но оно не работает как dotnet myappname.dll.Ошибка Kestrel: адрес уже используется (ядро dotnet)

Мои Linux навыки ограничены, но я стараюсь идти по книге, так что я не перепутать вещи (после this tutorial от Скотта Hanselman):

$ cd /home/myusername/dotnettest 
$ dotnet run 

Now listening on: http://localhost:5123

Тогда я переместить его/вар так:

$ 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 

И ничего, кажется, придумать.

+0

После 'sudo netstat -ltp' Я видел, что процесс' dotnet' постоянно прослушивается: 5000 (я что-то упустил? Я не думаю, что это фоновый процесс по умолчанию делает это). Итак, я повторяю 'dotnet dotnettest.dll', и он работает ... но он слушает: 5000 (вместо: 5123). Мне нужно будет проверить, что я сделал неправильно, но похоже, что он учитывает изменения, внесенные в «Program.cs» (это странно, потому что «dotnet run» слушал: 5123, как ожидалось). –

ответ

0

Оказалось, что он не был правильно перестроен после изменения конфигурации Program.cs для прослушивания: 5123. И опубликованная версия использовала: 5000 вместо: 5123.

В то же время порт: 5000 использовался другим процессом dotnet (который я нашел через sudo netstat -ltp и убил впоследствии). Вот почему ошибка была «адрес уже используется». После убийства процесса dotnet dotnettest.dll работал нормально, но в порту: 5000 (не: 5123).

Я тогда убедился, что проект был правильно перестроен, я удалил папку /publish на всякий случай, затем dotnet publish. Важное примечание: Мне пришлось скопировать hosting.json вручную в встроенную папку (также в папку публикации впоследствии). Теперь он слушает: 5123.


Шаги:

  • Убедитесь, что у вас нет какой-либо другой процесс прослушивания порта по умолчанию (: 5000), используя sudo netstat -ltp.
  • Убедитесь, что проект правильно перестроен и включает в себя новую конфигурацию, которая прослушивает: 5123 (для этого вы должны включить hosting.json в свой проект, поэтому он копируется при сборке и публикации).

 Смежные вопросы

  • Нет связанных вопросов^_^