Я хочу запустить приложение ядра .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/"
}
}
}