【问题标题】:Configure separate port for grpc and rest API in .net Core API version 3.1在 .net Core API 3.1 版中为 grpc 和 rest API 配置单独的端口
【发布时间】:2020-05-20 05:55:44
【问题描述】:

之前我们使用 .net core 2.1 API,在同一个项目中我们暴露了两个端口,一个用于 rest API,另一个用于 GRPC

下面是我们的启动和程序文件的样子

启动文件

  public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        //Proces for GRPC server binding
        Server server = new Server
        {
            Services = { HealthCheck.BindService(new HealthCheckController()),
                         },
            Ports = { new ServerPort("0.0.0.0", 5001, ServerCredentials.Insecure) }
        };
        //Start GRPC server
        server.Start();
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseMvc();
    }

程序文件

public static class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args)
    {
        return WebHost.CreateDefaultBuilder(args).UseStartup<Startup>();
    }
}

现在我们想将同一个项目迁移到 .net core 3.1,并想维护两个单独的端口,一个用于 GRPC,另一个用于 REST API

下面是我们的启动和程序文件的样子

启动文件

  public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {

        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseRouting();

        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapGrpcService<HealthCheckController>();
            endpoints.MapControllers();
        });
        //Start GRPC server

    }

程序文件

    public static class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }


    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}

但问题是在迁移到 .net core 3.1 后,我们只能在同一个端口上使用这两个服务,如果我们能帮助我们如何为 GRPC 和 Rest API 分离端口,我们将不胜感激。

【问题讨论】:

    标签: asp.net rest grpc asp.net-core-3.1


    【解决方案1】:

    我不确定 .net 3.1 是否或为什么需要共享同一个端口(@98​​7654321@ 似乎表明,至少对于 3.0,情况并非如此)。如果您确实需要共享端口,您可能需要考虑使用带有反向代理 (https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-3.1#when-to-use-kestrel-with-a-reverse-proxy) 的 Kestrel,它应该能够根据其类型路由流量。

    【讨论】:

      猜你喜欢
      • 2021-10-16
      • 2019-01-13
      • 1970-01-01
      • 2013-03-09
      • 1970-01-01
      • 2020-09-10
      • 2021-03-15
      • 1970-01-01
      • 2020-08-22
      相关资源
      最近更新 更多