创建项目:GRPC.Server.Demo
添加项目文件夹:Protos 里面的文件添加 ProtosFile文件夹里的文件
解决方案:
GrpcGreeter 项目文件 :
- greet.proto – Protos/greet.proto 文件定义
gRPC,且用于生成 gRPC 服务器资产 。 有关详细信息,请参阅 gRPC 介绍。Greeter
- Services 文件夹:包含
服务的实现。Greeter
- appSettings.json – 包含配置数据,如 Kestrel 使用的协议。 有关详细信息,请参阅 ASP.NET Core 中的配置。
- Program.cs – 包含 gRPC 服务的入口点。 有关详细信息,请参阅 .NET 通用主机。
- Startup.cs – 包含配置应用行为的代码。 有关详细信息,请参阅应用启动。
GRPC.Server.Demo.csproj 添加一段如下:
<ItemGroup>
<Protobuf Include="**/*.proto" OutputDir="auto-generated" CompileOutputs="false" GrpcServices="Server" />
</ItemGroup>
GreeterService.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Grpc.Core;
using GRPC.Server.Demo;
using Microsoft.Extensions.Logging;
namespace GRPC.Server.Demo.Services
{
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)
{
return Task.FromResult(new HelloReply
{
Message = "Hello " + request.Name
});
}
}
}
创建项目:GRPC.Client.Demo
方案一:
gRPC 客户端项目需要以下包:
- Grpc.Net.Client,其中包含 .NET Core 客户端。
- Google.Protobuf 包含适用于 C# 的 Protobuf 消息。
- Grpc.Tools 包含适用于 Protobuf 文件的 C# 工具支持。 运行时不需要工具包,因此依赖项标记为
。PrivateAssets="All"
添加项目文件夹:Protos 同上
GRPC.Client.Demo.csproj 添加一段如下:
<ItemGroup>
<Protobuf Include="**/*.proto" OutputDir="auto-generated" CompileOutputs="false" GrpcServices="Client" />
</ItemGroup>
方案二:
Program.cs
using Grpc.Net.Client;
using GRPC.Server.Demo;
using System;
using System.Threading.Tasks;
namespace GRPC.Client.Demo
{
class Program
{
static async Task Main(string[] args)
{
// The port number(5001) must match the port of the gRPC server.
var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
new HelloRequest { Name = "GreeterClient" });
Console.WriteLine("Greeting: " + reply.Message);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
Console.WriteLine("Hello World!");
}
}
}
运行效果:
参考文献:
https://github.com/grpc
https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/grpc/grpc-start?view=aspnetcore-3.0&tabs=visual-studio
https://docs.microsoft.com/zh-cn/aspnet/core/grpc/index?view=aspnetcore-3.0