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

thtygnil  于 12个月前  发布在  .NET
关注(0)|答案(1)|浏览(115)

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

static void Main(string[] args)
{
    Console.WriteLine("Starting program");
    SetupHostAndServices();
}

private async static void SetupHostAndServices()
{
    var host = CreateHostBuilder().Build();
    host.Run();
    Console.ReadLine();
}

public static IHostBuilder CreateHostBuilder()
{
    return Host.CreateDefaultBuilder()
              .ConfigureWebHostDefaults(webHost =>
              {
                  webHost.UseStartup<Startup>();
              }).ConfigureServices(services => 
              {
              });
}

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

System.Diagnostics.ProcessStartInfo StartInfo = new System.Diagnostics.ProcessStartInfo
{
    FileName = GetServicePath(type),
    Arguments = args,
    UseShellExecute = true,
    RedirectStandardOutput = false,
};
System.Diagnostics.Process process = new System.Diagnostics.Process
{
    StartInfo = StartInfo,
};
process.Start();


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

gopyfrb3

gopyfrb31#

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

var builder = WebHost.CreateDefaultBuilder();
var app = builder
  .UseKestrel(options => options.Listen(IPAddress.Parse("127.0.0.1"), 60676))
  .UseContentRoot(Directory.GetCurrentDirectory())
  .UseWebRoot(Path.Combine(Directory.GetCurrentDirectory(), "wwwroot"))
  .Configure(app =>
  {
      app.UseStaticFiles(new StaticFileOptions()
      {
          FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "wwwroot")),
          RequestPath = "/"
      });
  }).UseStartup<Startup>().Build();
app.Run();

字符串

相关问题