WPF调用Grpc

一、服务端
1、创建proto文件:
Protos文件夹 —>右键添加新建项 —> ASP.Net Core下常规中选择"协议缓冲区文件"

2、proto文件协议:
WPF调用Grpc_第1张图片WPF调用Grpc_第2张图片

  • 需要使用空参数和空返回值时,需要使用这个协议文件
    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”

WPF调用Grpc_第3张图片
区别:加GrpcServices="Server"会生成服务端的grpc的cs文件,不加GrpcServices="Server"则会在cs文件中生成服务端和客户端。如果创建proto文件时用了需要使用空参数和空返回值的协议文件,则客户端没法生成,所以直接用不加GrpcServices="Server"的生成,直接拿到客户端。

  • 添加完成,右键重新生成一下项目

4、添加服务
Services文件夹 —>右键添加类 —> 重写Proto文件中的服务
WPF调用Grpc_第4张图片
5、添加服务注入
在grpc项目中,打开Program.cs文件。,添加app.MapGrpcService;
WPF调用Grpc_第5张图片
6、写完Grpc服务重写后,如果要写接口调用底层数据交互服务,就全部写完以后,将grpc项目重新生成一下。到此,服务端的grpc就搭建好了。

二、客户端
1、将服务端生成好的proto文件复制一份放入客户端grpc项目的proto文件夹中
2、如果服务端的服务引用没加GrpcServices=“Server”,则在服务端找到生成的cs类库,放在客户端的Grpc文件夹中。

  • 服务端找生成的cs类库,右键项目打开文件夹-obj-…

WPF调用Grpc_第6张图片
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文件夹中出现隐藏的生成的库类,右键包括在项目中。就可以了
WPF调用Grpc_第7张图片

4、使用:
WPF调用Grpc_第8张图片

  • GrpcFactory:代理类。(自己写的,测试记得需要把hh地址改为本地,端口19295)
  • ServiceInvoiceFee.ServiceInvoiceFeeClient:生成的库类里的
  • 参数/返回值:都是服务端proto文件中你自己早就写好的

---------End结束----------

你可能感兴趣的:(gRPC,EF,core,microsoft)