web-dev-qa-db-ja.com

ケストレルエラー:アドレスはすでに使用されています(ドットネットコア)

概要:dotnet runとしては機能しますが、dotnet myappname.dllとしては機能しません。

私のLinuxスキルは限られていますが、私は本を読み進めようとしているので、物事を混同しないようにしています(以下 このチュートリアル スコットハンゼルマンから):

$ cd /home/myusername/dotnettest
$ dotnet run

今聞いている: http:// localhost:512

次に、次のように/ 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

そして、何も出てこないようです。

9
Xavier Peña

次のコマンドは、ポートを見つけてプロセスを強制終了するのに役立ちます

Macのターミナル

プロセス番号を見つける

lsof -i: <port number>

例:lsof -i:5001

次に、プロセス番号を強制終了します

kill -9 <process number>

例-殺す-91600

9
San Jaisy

Program.cs構成を変更して:5123をリッスンした後、正しく再構築されなかったことが判明しました。そして、公開されたバージョンは:5123の代わりに:5000を使用していました。

同時に、ポート:5000は別のdotnetプロセスによって使用されていました(これはSudo netstat -ltpで見つけ、後で強制終了しました)。そのため、エラーは「アドレスはすでに使用されています」でした。プロセスを強制終了した後、dotnet dotnettest.dllは正常に実行されましたが、ポート:5000(まだ:5123ではありません)で実行されました。

次に、プロジェクトが正しく再構築されたことを確認し、念のため/publishフォルダーを削除してから、dotnet publishを削除しました。重要な注意:hosting.jsonを手動でビルドフォルダーにコピーする必要がありました(後で公開フォルダーにも)。今それは:5123を聞いています。


手順:

  • Sudo netstat -ltpを使用して、デフォルトのポート(:5000)をリッスンしている他のプロセスがないことを確認してください。
  • プロジェクトが適切に再構築され、:5123をリッスンする新しい構成が含まれていることを確認します(このため、プロジェクトにhosting.jsonを含める必要があるため、ビルドおよび公開時にコピーされます)。
1
Xavier Peña