一、服务端
1、创建proto文件:
Protos文件夹 —>右键添加新建项 —> ASP.Net Core下常规中选择"协议缓冲区文件"
2、proto文件协议:
- 需要使用空参数和空返回值时,需要使用这个协议文件
import “google/protobuf/empty.proto”; - 可空类型协议(定义参数使用:google.protobuf.StringValue / Int32Value / FloatValue)
import “google/protobuf/wrappers.proto”; - grpc方法转化json支持webapi请求
import “google/api/annotations.proto”;
3、添加服务引用
- 双击项目 —> 写入Protobuf Include=“Protos\ERP\sellerrefunds.proto” 或者
Protobuf Include=“Protos\ERP\sellerrefunds.proto”
GrpcServices=“Server”
区别:加GrpcServices="Server"会生成服务端的grpc的cs文件,不加GrpcServices="Server"则会在cs文件中生成服务端和客户端。如果创建proto文件时用了需要使用空参数和空返回值的协议文件,则客户端没法生成,所以直接用不加GrpcServices="Server"的生成,直接拿到客户端。
- 添加完成,右键重新生成一下项目
4、添加服务
Services文件夹 —>右键添加类 —> 重写Proto文件中的服务
5、添加服务注入
在grpc项目中,打开Program.cs文件。,添加app.MapGrpcService;
6、写完Grpc服务重写后,如果要写接口调用底层数据交互服务,就全部写完以后,将grpc项目重新生成一下。到此,服务端的grpc就搭建好了。
二、客户端
1、将服务端生成好的proto文件复制一份放入客户端grpc项目的proto文件夹中
2、如果服务端的服务引用没加GrpcServices=“Server”,则在服务端找到生成的cs类库,放在客户端的Grpc文件夹中。
- 服务端找生成的cs类库,右键项目打开文件夹-obj-…
3、如果服务端的服务引用加了GrpcServices=“Server”,则在客户端需要生成一次库类
在解决方案上右击打开文件所在位置-地址栏输入cmd打开cmd窗口,输入以为命令:
packages\Grpc.Tools.2.54.0\tools\windows_x64\protoc.exe -I MMM.Grpc.Client --csharp_out MMM.Grpc.Client\Grpcs\ MMM.Grpc.Client\Protos\YuJing\erpyujing.proto --grpc_out MMM.Grpc.Client\Grpcs\ --plugin=protoc-gen-grpc=packages\Grpc.Tools.2.54.0\tools\windows_x64\grpc_csharp_plugin.exe
注意:erpyujing.proto改成你拿过来的proto文件的文件名
执行完成:打开grpc项目的Grpc文件夹,在解决方案资源管理器中反复点”显示所有文件“按钮,直到Grpc文件夹中出现隐藏的生成的库类,右键包括在项目中。就可以了
4、使用:
- GrpcFactory:代理类。(自己写的,测试记得需要把hh地址改为本地,端口19295)
- ServiceInvoiceFee.ServiceInvoiceFeeClient:生成的库类里的
- 参数/返回值:都是服务端proto文件中你自己早就写好的
---------End结束----------