gRPC Net Core服务器+WPF客户端

1、创建grpc服务器端项目,

2、把项目里的 greet.proto 文件的属性 gRPC Stub Classes  设置为Client and Server,这样,客户端就可以引用,否则,此前度娘无解,

3、greet.proto中的service可以创建多个,例如:

service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply);
  rpc SayHello2 (NameVales) returns(NameVales);
}

service Gr2{
	rpc SayH(NameVales)  returns(NameVales);
}

创建多个service后,需要先编译,再在 startup里加入 :

endpoints.MapGrpcService<Gr2Service>();

 greet.proto分析:

syntax = "proto3";

//本项目的命名空间
option csharp_namespace = "GrpcService3";

//本项目的包名
package greet;


// 服务
service Greeter {
  //功能
  rpc SayHello (HelloRequest) returns (HelloReply);
  rpc SayHello2 (NameVales) returns(NameVales);
}

service Gr2{
	rpc SayH(NameVales)  returns(NameVales);
}
// 以下为各种请求/反馈的类型
message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}
message NameVales{
	string name=1;
	int32 val=2;
}

proto支持的数据类型:

.proto 类型 C++类型 Java类型 Python类型[2][2] Go类型 Ruby类型 C#类型 PHP类型 Dart类型
double double double float float64 Float double float double
float float float float float32 Folat float float double
int32 int32 int int int32 Fixnum or Bignum(as required) int integer int
int64 int64 long int/long[3][3] int64 Bignum long integer/string[5][5] int64
uint32 uint32 int[1][1] int/long[3][3] uint32 Fixnum or Bignum(as required) uint integer int
uint64 uint64 long[1][1] int/long[3][3] uint64 Bignum ulong integer/string[5][5]}$ int64
sint32 int32 int int int32 Fixnum or Bignum(as required) int integer int
sint64 int64 long int/long[3][3] int64 Bignum long integer/string[5][5] int64
fixed32 uint32 int[1][1] int int32 Fixnum or Bignum(as required) int integer int
fixed64 uint64 long[1][1] int/long[3][3] uint64 Bignum ulong integer/string[5][5] int64
sfixed32 uint32 int[1][1] int int32 Fixnum or Bignum(as required) int integer int
sfixed64 uint64 long[1][1] int/long[3][3] uint64 Bignum ulong integer/string[5][5] int64
bool bool boolean bool bool TrueClass/FalseClass bool boolean bool
string string String str/unicode[4][4] string String(UTF-8) string string String
bytes string ByteString str []byte String(ASCII-8BIT) ByteString string List<int>

 还可以枚举:

message SearchRequest {
  string query = 1;
  int32 page_number = 2;
  int32 result_per_page = 3;
  enum Corpus {
    UNIVERSAL = 0;
    WEB = 1;
    IMAGES = 2;
    LOCAL = 3;
    NEWS = 4;
    PRODUCTS = 5;
    VIDEO = 6;
  }
  Corpus corpus = 4;
}

4、创建net core wpf项目,NuGet安装 Grpc.Core,

5、引入上面的项目,

6、使用:

            //地址一定要加上端口,否则未知错误
            var channel =new Channel(@"127.0.0.1:80", ChannelCredentials.Insecure);
            //前面说到的proto文件属性一定要设置为server+client,否则,此前度娘无解
            var client = new GrpcService3.Greeter.GreeterClient(channel);

            var c = new GrpcService3.Gr2.Gr2Client(channel);
            var a= c.SayH(new GrpcService3.NameVales());


            var reply = client.SayHello2(new GrpcService3.NameVales { Name = "LineZero",Val=22 });
            var r2 = client.SayHello(new GrpcService3.HelloRequest { Name = "dddddddddd" });

上一篇:逼格高又实用的 Linux 命令,开发可以多掌握一些


下一篇:docker安装elasticsearch:6.4.3