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