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