.NET 上的 gRPC 概觀
注意
這不是這篇文章的最新版本。 如需目前的版本,請參閱 本文的 .NET 9 版本。
警告
不再支援此版本的 ASP.NET Core。 如需詳細資訊,請參閱 .NET 和 .NET Core 支援原則。 如需目前版本,請參閱本文的 .NET 8 版本。
gRPC 是不限於語言的高效能遠端程序呼叫 (RPC) 架構。
gRPC 的主要優點包括:
- 新式高效能輕量型的 RPC 架構。
- 根據預設使用 Protocol Buffers 的合約優先式 API 開發,使您得以進行不限於語言的實作。
- 適用於多種語言的工具,可產生強型別伺服器及用戶端。
- 支援用戶端、伺服器及雙向資料流呼叫。
- 透過 Protobuf 二進位序列化減少網路使用量。
這些優點讓 gRPC 非常適合:
- 首重效率的輕量型微服務。
- 必須使用多種語言進行開發的多語言系統。
- 必須處理資料流要求或回應的點對點即時服務。
.proto
檔案的 C# 工具支援
gRPC 使用 API 開發的合約優先方法。 會在 .proto
檔案中定義服務和訊息:
syntax = "proto3";
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply);
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
會自動產生服務、用戶端和訊息的 .NET 類型,方法是在專案中包含 .proto
檔案:
- 將套件參考新增至 Grpc.Tools 套件。
- 將
.proto
檔案新增至<Protobuf>
項目群組。
<ItemGroup>
<Protobuf Include="Protos\greet.proto" />
</ItemGroup>
如需 gRPC 工具支援的相關詳細資訊,請參閱使用 C# 的 gRPC 服務。
ASP.NET Core 上的 gRPC 服務
gRPC 服務可以裝載於 ASP.NET Core。 服務與 ASP.NET Core 功能 (例如記錄、相依性插入 (DI)、驗證和授權) 完整整合。
將 gRPC 服務新增至 ASP.NET Core 應用程式
gRPC 需要 Grpc.AspNetCore 套件。 如需在 .NET 應用程式中設定 gRPC 的相關詳細資訊,請參閱設定 gRPC。
gRPC 服務專案範本
ASP.NET Core gRPC 服務專案範本提供入門服務:
public class GreeterService : Greeter.GreeterBase
{
private readonly ILogger<GreeterService> _logger;
public GreeterService(ILogger<GreeterService> logger)
{
_logger = logger;
}
public override Task<HelloReply> SayHello(HelloRequest request,
ServerCallContext context)
{
_logger.LogInformation("Saying hello to {Name}", request.Name);
return Task.FromResult(new HelloReply
{
Message = "Hello " + request.Name
});
}
}
GreeterService
繼承自 GreeterBase
類型,這是從 .proto
檔案中的 Greeter
服務所產生。 服務可在 Program.cs
中供用戶端存取:
app.MapGrpcService<GreeterService>();
若要深入了解 ASP.NET Core 上的 gRPC 服務,請參閱搭配 ASP.NET Core 的 gRPC 服務。
使用 .NET 用戶端呼叫 gRPC 服務
gRPC 用戶端是從 .proto
檔案產生的具體用戶端類型。 具體 gRPC 用戶端具有可轉譯為 .proto
檔案中 gRPC 服務的方法。
var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new Greeter.GreeterClient(channel);
var response = await client.SayHelloAsync(
new HelloRequest { Name = "World" });
Console.WriteLine(response.Message);
gRPC 用戶端是使用通道所建立,其代表與 gRPC 服務的長期連線。 您可以使用 GrpcChannel.ForAddress
來建立通道。
如需建立用戶端及呼叫不同服務方法的相關詳細資訊,請參閱利用 .NET 用戶端呼叫 gRPC 服務。
其他資源
gRPC 是不限於語言的高效能遠端程序呼叫 (RPC) 架構。
gRPC 的主要優點包括:
- 新式高效能輕量型的 RPC 架構。
- 根據預設使用 Protocol Buffers 的合約優先式 API 開發,使您得以進行不限於語言的實作。
- 適用於多種語言的工具,可產生強型別伺服器及用戶端。
- 支援用戶端、伺服器及雙向資料流呼叫。
- 透過 Protobuf 二進位序列化減少網路使用量。
這些優點讓 gRPC 非常適合:
- 首重效率的輕量型微服務。
- 必須使用多種語言進行開發的多語言系統。
- 必須處理資料流要求或回應的點對點即時服務。
.proto
檔案的 C# 工具支援
gRPC 使用 API 開發的合約優先方法。 會在 .proto
檔案中定義服務和訊息:
syntax = "proto3";
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply);
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
會自動產生服務、用戶端和訊息的 .NET 類型,方法是在專案中包含 .proto
檔案:
- 將套件參考新增至 Grpc.Tools 套件。
- 將
.proto
檔案新增至<Protobuf>
項目群組。
<ItemGroup>
<Protobuf Include="Protos\greet.proto" />
</ItemGroup>
如需 gRPC 工具支援的相關詳細資訊,請參閱使用 C# 的 gRPC 服務。
ASP.NET Core 上的 gRPC 服務
gRPC 服務可以裝載於 ASP.NET Core。 服務與 ASP.NET Core 功能 (例如記錄、相依性插入 (DI)、驗證和授權) 完整整合。
將 gRPC 服務新增至 ASP.NET Core 應用程式
gRPC 需要 Grpc.AspNetCore 套件。 如需在 .NET 應用程式中設定 gRPC 的相關詳細資訊,請參閱設定 gRPC。
gRPC 服務專案範本
gRPC 服務專案範本提供入門服務:
public class GreeterService : Greeter.GreeterBase
{
private readonly ILogger<GreeterService> _logger;
public GreeterService(ILogger<GreeterService> logger)
{
_logger = logger;
}
public override Task<HelloReply> SayHello(HelloRequest request,
ServerCallContext context)
{
_logger.LogInformation("Saying hello to {Name}", request.Name);
return Task.FromResult(new HelloReply
{
Message = "Hello " + request.Name
});
}
}
GreeterService
繼承自 GreeterBase
類型,這是從 .proto
檔案中的 Greeter
服務所產生。 服務可在 Startup.cs
中供用戶端存取:
app.UseEndpoints(endpoints =>
{
endpoints.MapGrpcService<GreeterService>();
});
若要深入了解 ASP.NET Core 上的 gRPC 服務,請參閱搭配 ASP.NET Core 的 gRPC 服務。
使用 .NET 用戶端呼叫 gRPC 服務
gRPC 用戶端是從 .proto
檔案產生的具體用戶端類型。 具體 gRPC 用戶端具有可轉譯為 .proto
檔案中 gRPC 服務的方法。
var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new Greeter.GreeterClient(channel);
var response = await client.SayHelloAsync(
new HelloRequest { Name = "World" });
Console.WriteLine(response.Message);
gRPC 用戶端是使用通道所建立,其代表與 gRPC 服務的長期連線。 您可以使用 GrpcChannel.ForAddress
來建立通道。
如需建立用戶端及呼叫不同服務方法的相關詳細資訊,請參閱利用 .NET 用戶端呼叫 gRPC 服務。