Ang*_*ang 3 c# protobuf-net grpc
我正在 .NET Core 3.1 上运行 gRPC 服务,并尝试从 .NET Framework 4.7.2 客户端进行调用。我正在使用 protobuf-net 来重用现有的 WCF 数据契约。今天,当响应对象的字段之一不为空时,我注意到以下意外的客户端行为。
Grpc.Core.RpcException: 'Status(StatusCode="Internal", Detail="Failed to deserialize response message.")
下面是一个示例,说明了数据契约的一般结构 - 在本例中,Response<PersonData>是响应,PersonDataList是非空字段。
[DataContract]
public class Response<TValue>{
[DataMember(Order = 1)]
public TValue Value;
}
[DataContract]
public class PersonData : Data {
[DataMember(Order = 1)]
public IList<PersonDataItem> PersonDataList;
}
[DataContract]
public PersonDataItem {
[DataMember(Order = 1)]
public PersonDataType Type {get; private set;}
[DataMember(Order = 2)]
public DateTime? Time {get; private set;}
....
[DataContract]
public enum PersonDataType : int {
[EnumMember]
Child = 1,
[EnumMember]
Adult = 2
}
}
[DataContract]
[ProtoInclude(1, typeof(PersonData)]
public class Data {
[DataMember(Order = 1)]
public string Name
}
Run Code Online (Sandbox Code Playgroud)
让我困惑的是,我在其他数据协定中使用了类似或相同的模式,这些模式在反序列化响应时不会抛出异常。我做了一些搜索,发现2019 年的这个问题指出不同的 Google.Protobuf 版本可能是错误来源(但这里似乎并非如此)。
以前有人见过这个异常吗?我不确定这是否是我的数据合同的问题,或者可能是某些软件包版本不匹配的问题。非常感谢任何想法或建议!
我还尝试更新到 protobuf-net v3.0.0,但每次客户端调用都会出现新的客户端异常:Grpc.Core.RpcException: 'Status(StatusCode="Unknown", Detail="Exception was thrown by handler. InvalidOperationException: Length mismatch; calculated '63', actual '58'"...)这似乎是一个不同的问题,我当前的猜测是它可能与以下重大更改有关:动态类型在protobuf-net v3中。
| 归档时间: |
|
| 查看次数: |
5331 次 |
| 最近记录: |