Невозможно запустить пустельгу. Не удалось привязать к адресу, который уже используется - PullRequest
0 голосов
/ 29 июня 2018

Я хочу запустить приложение ядра .net из созданного мной API, который также есть в .Net Core.

Я добавил функцию UseUrls() в файл Program.cs, чтобы он использовал порт, который я хочу использовать. Вот как выглядит мой Program.cs этого другого модуля.

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();
}

Поэтому, когда я открываю CMD, где находится этот модуль, и набираю dotnet run, он запускает приложение на http://localhost:50003, что хорошо, потому что это порт, с которого я хочу начать.

Но мне нужно запустить это приложение из этого API. И вот код, который я написал команду dotnet run:

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);
        }
    }

Но когда я запускаю ее, эта переменная output возвращает ошибку, которая говорит

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

И я не знаю, почему оно пытается запустить приложение с 4221 портом, когда написано в Program.cs для использования порта 50003.

Таким образом, та же самая команда dotnet run работает нормально, если я пишу вручную в CMD, и не работает так, как должна, если я печатаю свой код.

"Использование параметров запуска из C: \ Users \ StarTech \ Desktop \ Actibook Actibook \ actibook-backend \ ServerCore \ TimeFrame.Actibook.WebService \ wwwroot \ Packages \ 2018-6-Friday031203SampleConverter \ Properties \ launchSettings.json ... \ r \ ncrit: Microsoft.AspNetCore.Server.Kestrel [0] \ r \ n Невозможно запустить Kestrel. \ r \ nSystem.IO.IOException: Не удалось выполнить привязку к адресу http://127.0.0.1:4221:, который уже используется. - -> Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions.Internal.AddressInUseException: Ошибка -4091 адрес EADDRINUSE уже используется ---> Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal.Networking.UvException: ошибка -4091 Адрес электронной почты уже используется \ r \ n в Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal.Networking.LibuvFunctions.ThrowError (Int32 statusCode) \ r \ n в Microsoft.AspNetCore.Server.Kestrel.Transport. Libuv.Internal.Networking.LibuvFunctions.tcp_getsockname (дескриптор UvTcpHandle, SockAddr & addr, Int32 & namelen) \ r \ n в Microsoft.AspNetCore.Server.Kes trel.Transport.Libuv.Internal.Networking.UvTcpHandle.GetSockIPEndPoint () \ r \ n в Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal.Listener.ListenTcp (логическое использование FileHandle) \ r \ n. Microsoft. Server.Kestrel.Transport.Libuv.Internal.Listener.CreateListenSocket () \ r \ n в Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal.Listener. <> C.b__8_0 (слушатель слушателя) \ r \ n в Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal.LibuvThread.CallbackAdapter 1.<>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_0 1. d.MoveNext () \ r \ n --- Конец трассировки стека из предыдущего расположения, где было сгенерировано исключение. --- \ r \ n в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () \ r \ n в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Задача) \ r \ n в Microsoft.AspNetCore.Server.est. Core.Internal.AddressBinder.d__5.MoveNext () \ r \ n --- Конец трассировки стека внутренних исключений --- \ r \ n в Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.d__5.Mov eNext () \ r \ n --- Конец трассировки стека от предыдущего местоположения, где было сгенерировано исключение --- \ r \ n в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () \ r \ n в System.Runtime.CompilerServices .TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Задача задачи) \ r \ n в Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.d__6.MoveNext () \ r \ n --- Конец трассировки стека из предыдущего расположения, где было сгенерировано исключение --- \ r \ n в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () \ r \ n в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Задача) \ r \ n в Microsoft.AspNetCore.Server.est. Core.Internal.AddressBinder.d__7.MoveNext () \ r \ n --- Конец трассировки стека из предыдущего местоположения, где было сгенерировано исключение --- \ r \ n в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () \ r \ n в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Задача) \ r \ n в Microsoft.AspNetCore.Server.Kestrel.C ore.Internal.AddressBinder.AddressesStrategy.d__2.MoveNext () \ r \ n --- Конец трассировки стека из предыдущего расположения, где было сгенерировано исключение --- \ r \ n в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () \ r \ n в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Задача) \ r \ n в Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.d__0.MoveNext () \ r \ n --- Конец трассировки стека из предыдущего местоположения, где было сгенерировано исключение --- \ r \ n в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () \ r \ n в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (задача задачи) \ r \ n в 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/"
    }
  }
}

1 Ответ

0 голосов
/ 29 июня 2018

Работает ли что-то подобное? Вот как мой API был настроен некоторое время назад ...

  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();
...