C# GRPC 引用现有对象
C# GRPC Reference existing object
我对使用 GRPC 完全陌生。我有关于设置 .proto 文件的问题。
在我现有的解决方案中,例如 class:
public class Car
{
public int Id { get; set; }
public string Brand { get; set; }
public string? Type {get; set;}
}
Car class 被放置在核心项目中,因为它被解决方案周围的其他逻辑使用。但是,如果我喜欢在我的 GRPC 服务器中使用 return,是否真的有必要在 .proto 文件中再次定义它:
message CarReply {
int32 Id = 1;
string Brand = 2;
string Type = 3;
}
我喜欢的是对我的 Car() class 的引用。这不可能吗?
如果你想使用普通的“契约优先”protobuf,那么是的:你需要使用模式和生成的类型——生成的类型知道如何执行序列化。
但是!可能有另一种选择; protobuf-net(和 protobuf-net.Grpc)提供了一个独立的 protobuf 实现,它支持“代码优先”用法,允许您使用现有的类型模型。
使用 protobuf-net 执行此操作的最简单 方法是注释您的模型(使用 protobuf-net 的属性或框架数据合同属性 - 第一个选项给出更多控制);例如:
[ProtoContract]
public class Car
{
[ProtoMember(1)]
public int Id { get; set; }
[ProtoMember(2)]
public string Brand { get; set; }
[ProtoMember(3)]
public string? Type {get; set;}
}
也可以在运行时配置所有内容,但这有点难。
这也可以完全与 gRPC 一起使用,使用接口来定义服务契约; full guidance is here
我对使用 GRPC 完全陌生。我有关于设置 .proto 文件的问题。 在我现有的解决方案中,例如 class:
public class Car
{
public int Id { get; set; }
public string Brand { get; set; }
public string? Type {get; set;}
}
Car class 被放置在核心项目中,因为它被解决方案周围的其他逻辑使用。但是,如果我喜欢在我的 GRPC 服务器中使用 return,是否真的有必要在 .proto 文件中再次定义它:
message CarReply {
int32 Id = 1;
string Brand = 2;
string Type = 3;
}
我喜欢的是对我的 Car() class 的引用。这不可能吗?
如果你想使用普通的“契约优先”protobuf,那么是的:你需要使用模式和生成的类型——生成的类型知道如何执行序列化。
但是!可能有另一种选择; protobuf-net(和 protobuf-net.Grpc)提供了一个独立的 protobuf 实现,它支持“代码优先”用法,允许您使用现有的类型模型。
使用 protobuf-net 执行此操作的最简单 方法是注释您的模型(使用 protobuf-net 的属性或框架数据合同属性 - 第一个选项给出更多控制);例如:
[ProtoContract]
public class Car
{
[ProtoMember(1)]
public int Id { get; set; }
[ProtoMember(2)]
public string Brand { get; set; }
[ProtoMember(3)]
public string? Type {get; set;}
}
也可以在运行时配置所有内容,但这有点难。
这也可以完全与 gRPC 一起使用,使用接口来定义服务契约; full guidance is here