proto 文件
gRPC 使用协定优先方法进行 API 开发。 默认情况下,协议缓冲区(protobuf)用作接口设计语言(IDL)。 *的 proto文件包含:
- GRPC 服务的定义。
- 客户端和服务器之间发送的消息。
有关 protobuf 文件语法的详细信息,请参阅官方文档(protobuf)。
例如,请考虑gRPC 服务入门中使用的fibonacci文件:
- 定义
Greeter
服务。 -
Greeter
服务定义SayHello
调用。 -
SayHello
发送HelloRequest
消息并收到HelloReply
消息:
将一个 proto 文件添加到 C# 应用
在项目中,将 *proto文件添加到 <Protobuf>
项组:
.proto 文件的 C# 工具支持
需要工具包Grpc才能从C# *proto文件生成资产。 生成的资产(文件):
- 每次生成项目时都按需生成。
- 不会添加到项目中,也不会签入源控件。
- 是包含在obj目录中的生成项目。
服务器项目和客户端项目都需要此包。 Grpc.AspNetCore
元包包括对 Grpc.Tools
的引用。 服务器项目可以使用 Visual Studio 中的包管理器或通过将 <PackageReference>
添加到项目文件来添加 Grpc.AspNetCore
:
客户端项目应直接引用 Grpc.Tools
使用 gRPC 客户端所需的其他包。 运行时不需要工具包,因此,该依赖项标记为 PrivateAssets="All"
:
生成C#的资产
工具包将生成表示C#在包含的 *proto文件中定义的消息的类型。
对于服务器端资产,会生成抽象服务基类型。 基类型包含proto文件中包含的所有 gRPC 调用的定义。 创建一个派生自此基类型的具体服务实现,并为 gRPC 调用实现逻辑。 对于 greet.proto
(前面所述的示例),将生成一个包含虚拟 SayHello
方法的抽象 GreeterBase
类型。 具体的实现 GreeterService
重写方法,并实现处理 gRPC 调用的逻辑。
对于客户端资产,会生成具体的客户端类型。 Proto文件中的 gRPC 调用被转换为具体类型上的方法,可以调用该类型。 在 greet.proto
中,将生成一个具体 GreeterClient
类型。 调用 GreeterClient.SayHelloAsync
以启动对服务器的 gRPC 调用。
默认情况下,将为 <Protobuf>
项组中包含的每个 *proto文件生成服务器和客户端资产。 若要确保服务器项目中仅生成服务器资产,则 GrpcServices
属性设置为 Server
。
同样,特性设置为在客户端项目中 Client
。
其他资源
- .NET Core 上的 gRPC 的简介
- 在 ASP.NET Core 中创建 .NET Core gRPC 客户端和服务器
- 使用 ASP.NET Core 的 gRPC 服务
- 通过 .NET 客户端调用 gRPC 服务
作者:沐雪
文章均系作者原创或翻译,如有错误不妥之处,欢迎各位批评指正。本文版权归作者所有,如需转载恳请注明。
为之网-热爱软件编程 http://www.weizhi.cc/