zoukankan      html  css  js  c++  java
  • 创建可由 JavaScript 调用的 C# gRPC 服务

    1. 创建 gRPC 服务

    • VSCode 打开准备用来存放项目文件夹的文件夹;
    • VSCode 中打开终端,运行命令:
      dotnet new grpc -o grpc-service-web
      code -r grpc-service-web
    • 当对话框询问是否要将所需资产添加到项目时,选择“是”。

    2. 修改服务配置,以支持 Web 调用

      gRPC-Web 允许浏览器 JavaScript 应用调用 gRPC 服务,配置方法如下:

    • Program.cs 文件中,添加引用:
      using Microsoft.AspNetCore.Server.Kestrel.Core;
      using System.Net;
    • Program.cs 文件中,找到 CreateHostBuilder() 函数,用下面代码替换:
      public static IHostBuilder CreateHostBuilder(string[] args) =>
                  Host.CreateDefaultBuilder(args)
                      .ConfigureWebHostDefaults(webBuilder =>
                      {
                          webBuilder.ConfigureKestrel(options =>
                          {
                              // Setup a Http1AndHttp2 endpoint without TLS.
                              IPAddress ip = Dns.GetHostAddresses("172.22.113.93")[0];
                              options.Listen(ip, 5000, o => o.Protocols =
                                  HttpProtocols.Http1AndHttp2);
                          });
      
                          webBuilder.UseStartup<Startup>();
                      });
      View Code
    • 在终端中,运行如下命令(添加对 Grpc.AspNetCore.Web 包的引用)
      dotnet add grpc-service-web.csproj package Grpc.AspNetCore.Web
    • 打开 Startup.cs 文件,找到 ConfigureServices() 函数,用下面的代码替换:
      public void ConfigureServices(IServiceCollection services)
              {
                  services.AddGrpc();
      
                  services.AddCors(o => o.AddPolicy("AllowAll", builder =>
                  {
                      builder.AllowAnyOrigin()
                          .AllowAnyMethod()
                          .AllowAnyHeader()
                          .WithExposedHeaders("Grpc-Status", "Grpc-Message", "Grpc-Encoding", "Grpc-Accept-Encoding");
                  }));
              }
      View Code
    • 打开 Startup.cs 文件,找到 Configure() 函数,用下面的代码替换:
      public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
              {
                  if (env.IsDevelopment())
                  {
                      app.UseDeveloperExceptionPage();
                  }
      
                  app.UseRouting();
      
                  app.UseGrpcWeb(new GrpcWebOptions { DefaultEnabled = true });
      
                  app.UseCors();
      
                  app.UseEndpoints(endpoints =>
                  {
                      endpoints.MapGrpcService<GreeterService>().RequireCors("AllowAll");
      
                      endpoints.MapGet("/", async context =>
                      {
                          await context.Response.WriteAsync("Communication with gRPC endpoints must be made through a gRPC client. To learn how to create a client, visit: https://go.microsoft.com/fwlink/?linkid=2086909");
                      });
                  });
              }
      View Code

    3. 运行服务

    • 终端中,运行命令:
      dotnet run
    • 输出如下:

       

       

    注1:Win10 之前的操作系统(macOS、Win7 等)不支持 TLS;

    注2:基于浏览器的应用 不支持 http2 。

    参考:在 ASP.NET Core 中创建 gRPC 客户端和服务器

       无法在 Win7/macOS 上启动 ASP.NET Core gRPC 应用

       在浏览器应用中使用 gRPC

      

  • 相关阅读:
    利用朴素贝叶斯算法进行分类-Java代码实现
    机器学习项目中常见的误区
    Chromium项目文化
    又一次定义CDN:为什么是迅雷?
    程序猿的思维修炼
    linux杂谈(十二):CDN加速
    Run-Time Check Failure #2
    打开excel2007&quot;向程序发送命令时出现故障&quot;
    [Unity 3D] Quaternion.LookRotation
    具体解释 IBM Bluemix 端到端开发体验
  • 原文地址:https://www.cnblogs.com/dhqy/p/14108849.html
Copyright © 2011-2022 走看看