2021-05-19 ASP.NET Core笔试题 说说如何使用C#实现简单模式gRPC

说说如何使用C#实现简单模式gRPC

分为客户端和服务端;

服务端:

1.通过vs新建一个gRPC服务,会内置一proto文件;内容如下,可以理解成是一个模板,通过这个模板可以生成对应的类文件。

syntax = "proto3";  //规范---标准---工具生成C#

option csharp_namespace = "Zhaoxi.gRPCDemo.DefaultServer";

package greet;

// The greeting service definition.
service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply);
}

// The request message containing the user's name.
message HelloRequest {
  string name = 1;
}

// The response message containing the greetings.
message HelloReply {
  string message = 1;
}

2.需要让这个文件生效,就必须要在项目文件中配置使用这个文件;GrpcServices=“Server”,这是服务端的配置;

<ItemGroup>
  <Protobuf Include="Protos\CustomMath.proto" GrpcServices="Server" />
  <Protobuf Include="Protos\greet.proto" GrpcServices="Server" />
</ItemGroup>

3.编译,就可以通过这个模板生成一些类,包含这些类的方法;

客户端:

1.Vs新建一个控制台,作为客户端

2.把服务端的那个proto文件,连同文件一起Copy到客户端来。

3.配置客户端的项目文件,如下。请注意 GrpcServices=“Client”

  <ItemGroup>
    <Protobuf Include="Protos\greet.proto" GrpcServices="Client" />
    <Protobuf Include="Protos\CustomMath.proto" GrpcServices="Client" />
  </ItemGroup>

4.编译后,编写调用gRPC的方法如下:

private static async Task TestHello()
{
     using (var channel = GrpcChannel.ForAddress("https://localhost:5001"))
     {
        var client = new Greeter.GreeterClient(channel);
        var reply = await client.SayHelloAsync(new HelloRequest { Name = "朝夕教育" });
        Console.WriteLine("Greeter 服务返回数据: " + reply.Message); 
      }
 }