建立可由 JavaScript 呼叫的 C# gRPC 服務
阿新 • • 發佈:2020-12-09
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
- Program.cs 檔案中,找到 CreateHostBuilder() 函式,用下面程式碼替換:
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.ConfigureKestrel(options
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 應用