本系列文章讲解如何使用 .NET Core 建立 gRPC Server 端和 Client 端。
关于 gRPC 请参见:https://www.grpc.io/。
环境
Visual Studio 2022
.NET Core 6.0
一、创建项目
在 Visual Studio 中,可以直接创建 gRPC 服务的项目,但是这不利于我们了解前因后果,所以我们还是从空白开始,创建一个“ASP.NET Core 空”的项目。
记得勾上“配置 HTTPS”(默认是勾上的),因为 gRPC 使用 HTTP/2,而 HTTP/2 是使用 https:// 的。
二、添加 NuGet 程序包
Grpc.AspNetCore
三、添加协议缓冲区文件
我添加时总是提示“必须指定语言”,添加不起,所以我就添加一个文本文件,然后改名的。
文件名:Greeter.proto,扩展名 .proto 很重要。内容如下:
syntax = "proto3"; option csharp_namespace = "Itpow"; package Greeter; service Greeter { rpc SayHello (HelloRequest) returns (HelloReply); } message HelloRequest { string name = 1; } message HelloReply { string message = 1; }
syntax = "proto3",表示 3 这个版本,目前 Google 推荐使用 3。
其中,命名空间、package 不是必须的,但是还是建议加上。
如上,这个代码是 proto 格式的,实际上它是一个中间态的东西,它在不同的语言环境中,与不同的语言对应使用,比如后面,Visual Studio 会认为存在 Greeter 这么一个类。
四、工程文件中加上 Protobuf
点击项目,会自动打开 *.csproj,加上一句:
<ItemGroup> <Protobuf Include="Greeter.proto" GrpcServices="Server" /> </ItemGroup>
五、写服务类
新建一个 .cs 文件,内容如下:
using Grpc.Core; using Itpow; namespace GrpcGreeterServer { public partial class GreeterService : Greeter.GreeterBase { public override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context) { return Task.FromResult(new HelloReply { Message = $"你好 {request.Name}" }); } } }
Itpow、HelloReply、SayHello……我知道是来源于 .proto,但是 Greeter.GreeterBase 哪里冒出来的呢?这是前面几步做了后,Visual Studio 给我们编译出来的,可以按 F12 追踪。Name 又是哪里冒出来的呢?前面不是小写开头么?也是编译出来的,自动转换成了 C# 风格。
六、改 Program.cs
using GrpcGreeterServer; var builder = WebApplication.CreateBuilder(args); builder.Services.AddGrpc(); // 这句是加的。 var app = builder.Build(); app.MapGrpcService<GreeterService>(); // 这句是加的。 app.MapGet("/", () => "Hello World!"); app.Run();
七、运行
Ctrl + F5,运行效果如下:
记住这个 https 的 URL,后面要用。
相关阅读