wake-up-neo.com

Kestrel kann nicht gestartet werden. Fehler beim Binden an bereits verwendete Adresse

Ich möchte eine .net Core-Anwendung mit einer von mir erstellten API starten, die sich ebenfalls in .Net Core befindet.

Ich habe UseUrls() function zur Program.cs-Datei hinzugefügt, damit es einen Port verwendet, den ich verwenden möchte. Also heres, wie es meine Program.cs des anderen Moduls aussieht.

public class Program
{
    public static void Main(string[] args)
    {
        BuildWebHost(args).Run();
    }

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .UseUrls("http://*:50003")
            .UseKestrel(options =>
            {
                options.Limits.MaxRequestBodySize = null;
            }
            )
            .UseDefaultServiceProvider(options =>
                options.ValidateScopes = false)
            .Build();
}

Wenn ich also CMD öffne, in dem sich dieses Modul befindet, und dotnet run eingeben, wird die Anwendung auf http://localhost:50003 gestartet, was in Ordnung ist, da dies der Port ist, an dem ich beginnen möchte.

Aber ich muss diese App über diese API starten. Und hier ist der Code, dass ich den Befehl dotnet run geschrieben habe:

public IActionResult RunPackage(int id)
    {
        try
        {
            var workingDirectory = 'here goes the path of the directory of this module that i want to start running';

            var processStartInfo = new ProcessStartInfo();
            processStartInfo.FileName = "dotnet";
            processStartInfo.Arguments = "run";
            processStartInfo.WorkingDirectory = workingDirectory;
            processStartInfo.UseShellExecute = false;
            processStartInfo.RedirectStandardOutput = true;
            processStartInfo.RedirectStandardError = false;
            processStartInfo.CreateNoWindow = true;
            var process = new Process();
            process.StartInfo = processStartInfo;
            process.Start();
            var reader = process.StandardOutput;
            var output = reader.ReadToEnd();

            return Ok();
        }
        catch (Exception e)
        {
            return BadRequest(e.Message);
        }
    }

Aber wenn ich es laufen lasse, gibt die Variable output einen Fehler zurück, der darauf hinweist 

Unable to start Kestrel.
System.IO.IOException: Failed to bind to address http://127.0.0.1:4221: 
address already in use

Und ich weiß nicht, warum es versucht, die App mit 4221 port zu starten, während es in Program.cs geschrieben ist, um den Port 50003 zu verwenden.

Der gleiche Befehl dotnet run funktioniert also gut, wenn ich manuell in CMD schreibe und nicht so funktioniert, wie er sollte, wenn ich meinen Code eingebe.

"Starteinstellungen von C:\Users\StarTech\Desktop\Actibook Actibook\Actibook-Backend\ServerCore\TimeFrame.Actibook.WebService\wwwroot\Packages\2018-6-Friday031203SampleConverter\Properties\launchSettings.json ... verwenden. ncrit: Microsoft.AspNetCore.Server.Kestrel [0]\r\n Kestrel kann nicht gestartet werden.\r\nSystem.IO.IOException: Fehler beim Binden an Adresse http://127.0.0.1:4221 : address bereits verwendet. ---> Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions.Internal.AddressInUseException: Fehler -4091 EADDRINUSE-Adresse wird bereits verwendet ---> Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal. Networking.UvException: Fehler -4091 EADDRINUSE-Adresse wird bereits verwendet\r\n bei Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal.Networking.LibuvFunctions.ThrowError (Int32 statusCode)\r\n bei Microsoft.AspNetCore.Server .Kestrel.Transport.Libuv.Internal.Networking.LibuvFunctions.tcp_getsockname (UvTcpHandle-Handle, SockAddr & addr, Int32 & namelen)\r\n unter Microsoft.AspNetCore. Server.Kestrel.Transport.Libuv.Internal.Networking.UvTcpHandle.GetSockIPEndPoint ()\r\n bei Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal.Listener.ListenTcp (Boolean useFileHandle)\r bei Microsoft. AspNetCore.Server.Kestrel.Transport.Libuv.Internal.Listener.CreateListenSocket ()\r\n unter Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal.Listener. <> C.b__8_0 (Listener-Listener)\r\n bei Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal.LibuvThread.CallbackAdapter1.<>c.<.cctor>b__3_1(Object callback, Object state)\r\n at Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal.LibuvThread.DoPostWork()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal.ListenerPrimary.<StartAsync>d__15.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.LibuvTransport.<BindAsync>d__20.MoveNext()\r\n --- End of inner exception stack trace ---\r\n at Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.LibuvTransport.<BindAsync>d__20.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServer.<>c__DisplayClass23_01. <g__OnBind | 0> d.MoveNext ()\r\n --- Ende der Stapelverfolgung von der vorherigen Position, an der die Ausnahme ausgelöst wurde - -\r\n bei System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw ()\r\n bei System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Taskaufgabe)\r\n bei Microsoft.AspNetCore.Server.Kestrel.Core. Internal.AddressBinder.d__5.MoveNext ()\r\n --- Ende der Ablaufverfolgung des inneren Ausnahmestacks ---\r\n unter Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Addres sBinder.d__5.MoveNext ()\r\n --- Ende der Stack-Ablaufverfolgung von der vorherigen Position, an der eine Ausnahme ausgelöst wurde ---\r\n unter System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw ()\r\n unter System .Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Task task)\r\n bei Microsoft.AspNetCore.Server.Kestrel.Core.Intern.AddressBinder.d__6.MoveNext ()\r\n --- Ende des Stack-Trace von der vorherigen Position wo Ausnahme ausgelöst wurde ---\r\n bei System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw ()\r\n bei System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Task Task)\r\n bei Microsoft.AspNetCore. Server.Kestrel.Core.Internal.AddressBinder.d__7.MoveNext ()\r\n --- Ende des Stack-Trace vom vorherigen Speicherort, an dem eine Ausnahme ausgelöst wurde ---\r\n unter System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw ()\r\n bei System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Task task)\r\n bei Microsoft.AspNetCore. Server.Kestrel.Core.Internal.AddressBinder.AddressesStrategy.d__2.MoveNext ()\r\n --- Ende der Stack-Ablaufverfolgung vom vorherigen Speicherort, an dem eine Ausnahme ausgelöst wurde ---\r\n unter System.Runtime.ExceptionServices.ExceptionDispatchInfo .Throw ()\r\n bei System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Task task)\r\n bei Microsoft.AspNetCore.Server.Kestrel.Core.Intern.AddressBinder.d__0.MoveNext ()\r\n --- Ende der Stack-Ablaufverfolgung vom vorherigen Speicherort, an dem eine Ausnahme ausgelöst wurde ---\r\n unter System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw ()\r\n unter System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Task Task) )\r\n unter Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServer.d__23`1.MoveNext ()\r\n "

launchSettings.json contanins:

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:60924/",
      "sslPort": 0
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "launchUrl": "api/values",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "SampleConverter": {
      "commandName": "Project",
      "launchBrowser": true,
      "launchUrl": "api/values",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      },
      "applicationUrl": "http://localhost:60925/"
    }
  }
}
4
Ertan Hasani

Funktioniert so etwas? So wurde meine API vor einiger Zeit eingerichtet ...

  public static IWebHost BuildWebHost(string[] args) =>
     WebHost.CreateDefaultBuilder(args)
        .UseStartup<Startup>()
        .UseKestrel(options =>
            options=>
            {                    
                options.Listen(IPAddress.Any, 50003);
                options.Limits.MaxRequestBodySize = null;
            })
        )
        .UseDefaultServiceProvider(options =>
            options.ValidateScopes = false)
        .Build();
1
GPW