将代码优先 gRPC 与合同优先 gRPC 混合

Mixing Code-First gRPC with Contract-First gRPC

代码优先 = protobuf-net.Grpc.AspNetCore

契约优先 = Grpc.AspNetCore

我遵循了示例项目,它们与各自的服务器客户端通信时没有错误。但是,如果我混合搭配(代码优先到合同优先,反之亦然),我会得到一个方法未实现的异常。 proto文件匹配代码优先结构。

这是这些方法的局限性吗?

如果是这样,我们如何使用 Contract-First 而无需将映射器 类 从现有实体写入 protos 文件中定义的实体?

(Github solution of Greeter sample for both)

使用正确的注释定义 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);
    }
}