天天看点

ASP.NET Core 中创建 gRPC 客户端和服务器

创建项目:GRPC.Server.Demo

ASP.NET Core 中创建 gRPC 客户端和服务器

添加项目文件夹:Protos  里面的文件添加 ProtosFile文件夹里的文件

ASP.NET Core 中创建 gRPC 客户端和服务器

解决方案:

ASP.NET Core 中创建 gRPC 客户端和服务器

GrpcGreeter 项目文件 :

  • greet.proto – Protos/greet.proto 文件定义 

    Greeter

     gRPC,且用于生成 gRPC 服务器资产 。 有关详细信息,请参阅 gRPC 介绍。
  • 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>
           

方案二:

ASP.NET Core 中创建 gRPC 客户端和服务器

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!");
        }
    }
}
           

 运行效果:

ASP.NET Core 中创建 gRPC 客户端和服务器

参考文献:

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

继续阅读