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" });
本文档详细介绍了如何创建一个gRPC服务器端项目,并在.proto文件中定义多个服务。通过设置gRPCStubClasses属性为ClientandServer,使得客户端能够引用服务。接着,演示了在.NET Core WPF项目中引入gRPC服务并进行调用的方法。内容涵盖了gRPC服务定义、消息类型、数据类型以及客户端的实例化和调用过程。
330

被折叠的 条评论
为什么被折叠?



