C#调⽤gRPC的步骤及详细说明(踩坑后总结)
⽬的:实现在⼀台机器上使⽤gRPC搭建服务器和客户端环境,并进⾏⼀次通信
⾸先要说明⼀下为什么⽹上已经有了实现的教程博客我还要写,因为我今天开始摸索C#中gRPC的使⽤,我发现了⼀个很重要的问题:我是⼀个gRPC的⼩⽩,⽆奈的是我跟着博客⼀步⼀步做我都不知道⼀些步骤怎么运⾏出来,因此在运⾏成功之后有很多地⽅我来和⼤家详细分享⼀下。
这个如果需要理解原理的话可以先去看⼀下这两篇博⽂:gPRC基础教程 和 protobuf中⽂教程(第⼀篇)
⼀、新建项⽬
1、打开VS,新建⼀个名为gRPCDemo的C#类库
2、创建成功后,在解决⽅案资源管理器中,右键“解决⽅案gRPCDemo”,点击添加中的新建项⽬,依此创建两个控制台程序,分别命名为grpcServer、grpcClient,最终解决⽅案⽬录如下:
⼆、定义服务
1、创建定义服务的⽂件.proto
右击上⾯创建好⿊⾊的gRPCDemo项⽬,点击添加 -> 新建项⽬ ,在名称中直接填写:helloworld.proto
2、打开该创建的⽂件,定义服务⽅法,主要定义SayHello rpc ⽅法。原理如果想看懂建议看开头推荐的两篇博⽂
//定义服务的代码,放在刚创建的helloworld.proto中
syntax = "proto3";
package gRPCDemo;
service gRPC {
rpc SayHello (HelloRequest) returns (HelloReply) {}
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
三、使⽤GRPC.Tools⽣成代码
上⼀步服务定义成功了,我们开始⽣成客户端和服务端的代码。
1、⾸先在VS中对3个项⽬添加⼯具包引⽤
右键点击“解决⽅案gRPCDemo”,点击“管理解决⽅案的NuGet程序包”,在浏览中分别搜索"Grpc"、"Grpc.Tools"、
"Google.Protobuf",然后点击右⾯项⽬,全选,再点击安装(也可以⽤视图 -> 窗⼝ ->  程序包管理器控制台 中的"Install-Package Grpc"进⾏这⼀步,这⾥不提供这种⽅法,有兴趣⾃⼰百度)。
2、拷贝⼯具包到⽂件夹中
(1)⾸先,系统⾥到和grpc_(位置多半会在
C:\Users\Administrator\.nuget\ls\1.17.1\tools\windows_x64 ,如果不在可以⽤everything搜索前⾯的⼯具名)
(2)然后在⾃⼰的VS⼯程⽂件夹中建⽴⼀个新⽂件夹命名为packages , 并将上⾯到的.nuget\packages中的“Google.protobuf”、“grpc”、“ls”⽂件夹拷贝到我们⼯程⽂件夹下的packages⾥⾯。
3、使⽤⼯具⽣成代码
(1)在系统中运⾏cmd,运⾏下图指令进⼊到我们的⼯程⽂件夹⾥,也就是packages的上⼀层
(2)然后编写以下指令并运⾏:
这⾥参数需要详细说明⼀下(摘抄⾃:⼊门⼲货之Grpc的.Net 封装-MagicOnion),在这⾥卡了很长时间:
1. -I 指定⼀个或者多个⽬录,⽤来搜索.proto⽂件的,如果不指定,那就是当前⽬录,因为-I已经指定了。
2、 --csharp_out ⽤来⽣成C#代码,当然了还能cpp_out、java_out、javanano_out、js_out、objc_out、php_out、python_out、ruby_out 这时候你就应该知道,这玩意就是⽀持多语⾔的,才⽤的,⽣成⼀些⽂件,然后给各个语⾔平台调⽤。参数1是输出路径,参数2是proto的⽂件名或者路径。
3、--grpc_out 到这⾥可能有⼈会懵逼,咋回事?C#不是有⼀个⾃⼰的输出⽬录么?怎么⼜⼀个输出?
csharp_out是输出类似于咱们平时写的实体类,接⼝,定义之类的。⽣成的⽂件叫,额,就叫xxx.cs吧.
grpc_out是跟服务相关,创建,调⽤,绑定,实现相关。⽣成的玩意叫xxxGrpc.cs。 对⽐上个选项⽣成的⽂件名,⼤概能了解个⼗之⼋九吧。
4、--plugin=protoc-gen-grpc=grpc_ 这个就是c#的插件,python有python的,java有java的。必须要指定它。
以上指令回车运⾏即可,这⾥需要说明具体的⽂件夹路径还是要改⼀下,因为每个⼈⽂件所在⽬录是不同的,这⾥要注意,否则cmd会告诉你不到指定路径
ls\1.17.1\tools\windows_ -IgRPCDemo --csharp_out GRPCDemo
gRPCDemo\helloworld.proto --grpc_out gRPCDemo --plugin=protoc-gen-
grpc=ls\1.17.1\tools\windows_x86\grpc_
执⾏完之后,就可以看到⽬录下多了很多⽣成的⽂件
(3)添加⼯程,在VS⾥项⽬右键-> 添加 -> 现有项⽬ ,然后选择刚⽣成的⽂件进去就可以了;
(4)引⽤项⽬:在gRPCSever和gRPCClient项⽬中分别引⽤gRPCDemo,操作是右击项⽬的依赖项->添加引⽤ -> 解决⽅案 -> 点击gRPCDemo ,确定即可。
四、创建客户端和服务端
1、创建服务端:
在gRPCSever项⽬⾥打开program.cs,复制进去⼀下代码:
//服务端代码
using Grpc.Core;
using GRPCDemo;
using System;
using System.Threading.Tasks;
namespace gRPCServer
{
class severProgram
{
const int Port = 9007;
public static void Main(string[] args)
{
Server server = new Server
{
Services = { gRPC.BindService(new gRPCImpl()) },
Ports = { new ServerPort("localhost", Port, ServerCredentials.Insecure) }
};
server.Start();
Console.WriteLine("gRPC server listening on port " + Port);
Console.WriteLine("任意键退出...");
Console.ReadKey();
server.ShutdownAsync().Wait();
}
}
class gRPCImpl : gRPC.gRPCBase
{
// 实现SayHello⽅法
public override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context)        {
return Task.FromResult(new HelloReply { Message = "Hello " + request.Name });
}
}
}
python新建项目教程2、创建客户端:
在gRPCClient项⽬⾥打开program.cs,复制进去⼀下代码:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。