将代码优先 gRPC 与合同优先 gRPC 混合
Mixing Code-First gRPC with Contract-First gRPC
代码优先 = protobuf-net.Grpc.AspNetCore
契约优先 = Grpc.AspNetCore
我遵循了示例项目,它们与各自的服务器客户端通信时没有错误。但是,如果我混合搭配(代码优先到合同优先,反之亦然),我会得到一个方法未实现的异常。 proto文件匹配代码优先结构。
这是这些方法的局限性吗?
如果是这样,我们如何使用 Contract-First 而无需将映射器 类 从现有实体写入 protos 文件中定义的实体?
使用正确的注释定义 Code-First 服务有效:
namespace CodeFirstLib
{
[ProtoContract()]
public partial class HelloRequest
{
[ProtoMember(1, Name = @"name")]
public string Name { get; set; } = "";
}
[ProtoContract()]
public partial class HelloReply
{
[ProtoMember(1, Name = @"message")]
public string Message { get; set; } = "";
}
[ServiceContract(Name = @"greet.Greeter")]
public partial interface IGreeter
{
ValueTask<HelloReply> SayHelloAsync(HelloRequest value, CallContext context = default);
}
}
代码优先 = protobuf-net.Grpc.AspNetCore
契约优先 = Grpc.AspNetCore
我遵循了示例项目,它们与各自的服务器客户端通信时没有错误。但是,如果我混合搭配(代码优先到合同优先,反之亦然),我会得到一个方法未实现的异常。 proto文件匹配代码优先结构。
这是这些方法的局限性吗?
如果是这样,我们如何使用 Contract-First 而无需将映射器 类 从现有实体写入 protos 文件中定义的实体?
使用正确的注释定义 Code-First 服务有效:
namespace CodeFirstLib
{
[ProtoContract()]
public partial class HelloRequest
{
[ProtoMember(1, Name = @"name")]
public string Name { get; set; } = "";
}
[ProtoContract()]
public partial class HelloReply
{
[ProtoMember(1, Name = @"message")]
public string Message { get; set; } = "";
}
[ServiceContract(Name = @"greet.Greeter")]
public partial interface IGreeter
{
ValueTask<HelloReply> SayHelloAsync(HelloRequest value, CallContext context = default);
}
}