asp.net 如何自托管.NET WebAPI控制台应用程序?

thtygnil  于 2023-11-20  发布在  .NET
关注(0)|答案(1)|浏览(126)

我试图创建一个简单的控制台应用程序,作为本地主机服务器。该应用程序的重点是与另一个.net应用程序进行通信。
我已经成功创建了该应用程序,可以从Visual Studio中正常运行。但是,当我尝试从控制台或其他.net应用程序(使用Process.Start)运行该应用程序时。它无法按预期工作。
据我所知,这是因为它需要自我托管?
我用来创建webapi应用程序的教程是here。所以我的Program.cs看起来像这样:

  1. static void Main(string[] args)
  2. {
  3. Console.WriteLine("Starting program");
  4. SetupHostAndServices();
  5. }
  6. private async static void SetupHostAndServices()
  7. {
  8. var host = CreateHostBuilder().Build();
  9. host.Run();
  10. Console.ReadLine();
  11. }
  12. public static IHostBuilder CreateHostBuilder()
  13. {
  14. return Host.CreateDefaultBuilder()
  15. .ConfigureWebHostDefaults(webHost =>
  16. {
  17. webHost.UseStartup<Startup>();
  18. }).ConfigureServices(services =>
  19. {
  20. });
  21. }

字符串
要从我的另一个应用程序启动webapi控制台应用程序,我这样做:

  1. System.Diagnostics.ProcessStartInfo StartInfo = new System.Diagnostics.ProcessStartInfo
  2. {
  3. FileName = GetServicePath(type),
  4. Arguments = args,
  5. UseShellExecute = true,
  6. RedirectStandardOutput = false,
  7. };
  8. System.Diagnostics.Process process = new System.Diagnostics.Process
  9. {
  10. StartInfo = StartInfo,
  11. };
  12. process.Start();


当控制台应用程序启动时,它不会像在Visual Studio中那样执行。例如,它正在侦听端口5000,这不是我在LaunchSettings.json文件中定义的端口。它似乎也陷入了一个奇怪的POST循环。

gopyfrb3

gopyfrb31#

最终使用Kestel进行自托管。我的主机构建器现在看起来像这样:

  1. var builder = WebHost.CreateDefaultBuilder();
  2. var app = builder
  3. .UseKestrel(options => options.Listen(IPAddress.Parse("127.0.0.1"), 60676))
  4. .UseContentRoot(Directory.GetCurrentDirectory())
  5. .UseWebRoot(Path.Combine(Directory.GetCurrentDirectory(), "wwwroot"))
  6. .Configure(app =>
  7. {
  8. app.UseStaticFiles(new StaticFileOptions()
  9. {
  10. FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "wwwroot")),
  11. RequestPath = "/"
  12. });
  13. }).UseStartup<Startup>().Build();
  14. app.Run();

字符串

展开查看全部

相关问题