ASP.NET Core 中建立 gRPC 客戶端和伺服器

飛雪NET發表於2019-10-22

建立專案:GRPC.Server.Demo

新增專案資料夾:Protos  裡面的檔案新增 ProtosFile資料夾裡的檔案

解決方案:

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>

方案二:

 

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

相關文章