【问题标题】:gRPC and MVC in same ASP.NET Core 3.0 ApplicationgRPC 和 MVC 在同一个 ASP.NET Core 3.0 应用程序中
【发布时间】:2019-11-15 08:31:32
【问题描述】:

我正在构建需要通过 gRPC 和 Rest 访问的小型、单一用途的微服务。我们正在 ASP.NET Core 3.0 上实现。我意识到这是非常新鲜的东西,并且一直在寻找一些相当完整的参考实现来演示如何完成这项工作。

我有一个小型 .NET 服务(业务逻辑),称为 IOrders。现在我想针对这个后端服务连接 gRPC 和 MVC (HTTP)。

任何示例、github 存储库、要关注或查看的博客将不胜感激。

【问题讨论】:

  • 这是 link 用于 Asp.net Core 3 预览版 3 附带的版本的 gRPC。
  • 这是 ASP.NE Core 3,1 - link 中 gRPC 的实现指南。你会发现它很有用。

标签: asp.net-mvc asp.net-core asp.net-web-api grpc


【解决方案1】:

我遇到了完全相同的问题。我正在运行.NET Core 3.0 和 Grpc.AspNetCore 版本 2.23.1。最大的问题是在没有 SSL 的情况下启动它(不推荐用于 prod 环境)。使用证书我发现这个github Secure_gRpc 是一个很好的例子。 通过这种方式可以实现在没有 ssl 的情况下运行开发环境。

Program.cs 文件。关键方面是设置HttpProtocols.Http1AndHttp2。我还删除了证书只是为了让它运行。取消注释下一行以使用 SSL 和证书

public 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>()
                    .ConfigureKestrel(options =>
                {
                    options.Limits.MinRequestBodyDataRate = null;

                    options.ListenLocalhost(8008, listenOptions =>
                    {
                        listenOptions.Protocols = HttpProtocols.Http1AndHttp2;
                        listenOptions.UseHttps(adapterOptions =>
                        {
                            adapterOptions.ClientCertificateMode = ClientCertificateMode.NoCertificate;
                            adapterOptions.ServerCertificate = null;
                        });
                        //listenOptions.UseHttps("<path to .pfx file>", "<certificate password>");
                    });
                });

            });
}

Startup.cs 非常简单。如果修改 Startup.cs 文件添加服务的顺序非常重要,记住这一点非常重要。如果它不起作用,请尝试其他订单和/或查找官方文档。

public class Startup
{

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddGrpc((options => { options.EnableDetailedErrors = true; }));
        services.AddMvc(options => options.EnableEndpointRouting = false);            
    }


    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseRouting();
        app.UseMvcWithDefaultRoute();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapGrpcService<GreeterService>();

        });

    }
}

【讨论】:

    猜你喜欢
    • 2020-02-21
    • 1970-01-01
    • 2016-06-23
    • 1970-01-01
    • 2017-04-11
    • 2020-05-16
    • 1970-01-01
    • 1970-01-01
    • 2020-02-27
    相关资源
    最近更新 更多