gRPC:将消息原型转换为列表<message> (C# .Net6)
gRPC: Turn a message proto into a List<message> (C# .Net6)
我想将协议缓冲区中的 messageResponse 转换为
IEnumerable<messageResponse>
所以在服务中 return 我 IEnumerable<messageResponse>
原型我有:
syntax = "proto3";
option csharp_namespace = "ProjectName.Protos";
package Banana;
service Banana {
rpc GetAllBananas (MessageRequest) returns (ListBananasResponse);
}
//How to Turn this to IEnumerable<> ?
message ListBananasResponse{
string bananaName = 1;
string bananaInfo = 2;
}
message MessageRequest{
string message = 1;
}
这是我的 BananaService.cs
using Grpc.Core;
using ProjectName.Protos;
namespace ProjectName.Services
{
public class BananaService : Banana.BananaBase
{
//The Method should return a IEnumerable list of bananas
//want to do Task<IEnumerable<ListBananasResponse>>
public override Task<ListBananasResponse> GetAllBananas(MessageRequest request,
ServerCallContext context)
{
var lstbananas = new IEnumerable<ListBananasResponse>();
return lstbananas;
}
}
有没有办法做到这一点,如果有,怎么做? (我正在使用 C# .Net6)
欢迎任何回答:)
无法指定 protobuf RPC return 是一次响应列表。这里有两个选项:
- 添加具有重复字段的消息,并且 return 来自 RPC
- 使用流式 RPC
除非您实际上需要流式传输,否则我强烈建议您使用前一种方法。所以你的 .proto 文件将包含这样的部分:
service Banana {
rpc GetAllBananas (MessageRequest) returns (ListBananasResponse);
}
message Banana {
string name = 1;
string info = 2;
}
message ListBananasResponse {
repeated Banana bananas = 1;
}
然后您将使用类似以下内容实现 RPC:
public override Task<ListBananasResponse> GetAllBananas(MessageRequest request,
ServerCallContext context)
{
var banana1 = new Banana { Name = "name1", Info = "info1" };
var banana2 = new Banana { Name = "name2", Info = "info2" };
var response = new ListBananasResponse
{
Bananas = { banana1, banana2 }
};
return Task.FromResult(response);
}
我想将协议缓冲区中的 messageResponse 转换为
IEnumerable<messageResponse>
所以在服务中 return 我 IEnumerable<messageResponse>
原型我有:
syntax = "proto3";
option csharp_namespace = "ProjectName.Protos";
package Banana;
service Banana {
rpc GetAllBananas (MessageRequest) returns (ListBananasResponse);
}
//How to Turn this to IEnumerable<> ?
message ListBananasResponse{
string bananaName = 1;
string bananaInfo = 2;
}
message MessageRequest{
string message = 1;
}
这是我的 BananaService.cs
using Grpc.Core;
using ProjectName.Protos;
namespace ProjectName.Services
{
public class BananaService : Banana.BananaBase
{
//The Method should return a IEnumerable list of bananas
//want to do Task<IEnumerable<ListBananasResponse>>
public override Task<ListBananasResponse> GetAllBananas(MessageRequest request,
ServerCallContext context)
{
var lstbananas = new IEnumerable<ListBananasResponse>();
return lstbananas;
}
}
有没有办法做到这一点,如果有,怎么做? (我正在使用 C# .Net6)
欢迎任何回答:)
无法指定 protobuf RPC return 是一次响应列表。这里有两个选项:
- 添加具有重复字段的消息,并且 return 来自 RPC
- 使用流式 RPC
除非您实际上需要流式传输,否则我强烈建议您使用前一种方法。所以你的 .proto 文件将包含这样的部分:
service Banana {
rpc GetAllBananas (MessageRequest) returns (ListBananasResponse);
}
message Banana {
string name = 1;
string info = 2;
}
message ListBananasResponse {
repeated Banana bananas = 1;
}
然后您将使用类似以下内容实现 RPC:
public override Task<ListBananasResponse> GetAllBananas(MessageRequest request,
ServerCallContext context)
{
var banana1 = new Banana { Name = "name1", Info = "info1" };
var banana2 = new Banana { Name = "name2", Info = "info2" };
var response = new ListBananasResponse
{
Bananas = { banana1, banana2 }
};
return Task.FromResult(response);
}