web-dev-qa-db-ja.com

ケストレルを起動できません。既に使用されているアドレスaddressへのバインドに失敗しました

.NET Coreにもある作成したAPIから.net Coreアプリケーションを起動したい。

Program.csファイルにUseUrls() functionを追加して、使用したいポートを使用するようにしました。それで、他のモジュールの私の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:Failed to bind to address 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 EADDRINUSEアドレスは既にMicrosoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal.Networking.LibuvFunctions.ThrowError(Int32 statusCode)で使用されています\ r\n。 AspNetCore.Server.Kestrel.Transport.Libuv.Internal.Networking.LibuvFunctions.tcp_getsockname(UvTcpHandle handle、SockAddr&addr、Int32&namelen)\ r\n at Microsoft.AspNetCore.Server.Kes trel.Transport.Libuv.Internal.Networking.UvTcpHandle.GetSockIPEndPoint()\ r\n at Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal.Listener.ListenTcp(Boolean useFileHandle)\ r\n at Microsoft.AspNetCore。 Server.Kestrel.Transport.Libuv.Internal.Listener.CreateListenSocket()\ r\n at Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal.Listener。<> c.b__8_0(Listener listener)\ r\n at 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_0 1. <g__OnBind | 0> d.MoveNext()\ r\n ---例外がある前の場所からのスタックトレースの終わりスローされました---\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.Internal.AddressBinder.d__5.MoveNext()\ r\n ---内部例外スタックトレースの終了---\r\n Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.d__5で。 MoveNext()\ r\n ---例外がスローされた以前の場所からのスタックトレースの終わり---\r\n System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()で\ r\n System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Taskでtask)\ r\n at 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(Task task)で\ r\n Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinderで。 d__7.MoveNext()\ r\n ---例外がスローされた前の場所からのスタックトレースの終わり---\r\n System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()で\ r\n System.Runtimeで.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\ r\n at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.A ddressesStrategy.d__2.MoveNext()\ r\n ---例外がスローされた前の場所からのスタックトレースの終わり---\r\n System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()で\ r\nシステムで.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\ r\n at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.d__0.MoveNext()\ r\n ---前の場所からのスタックトレースの終わり例外がスローされた場所---\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.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/"
    }
  }
}
_
6
Ertan Hasani

このようなものは機能しますか?しばらく前に私の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();
1
GPW