因此,最近我了解了如何在IAsyncEnumerable<T>的帮助下使用protobuf-net.grpc进行流处理。这一切都很好,很好,但我现在正面临一个问题。
对于一些调用,我想使用一些元数据和流作为参数进行调用。
例如:
[OperationContract]
Task<bool> UploadPicture(ProfilePictureQuery query);签名如下:
[ProtoContract]
public class ProfilePictureQuery
{
[ProtoMember(1)]
public IAsyncEnumerable<byte[]> RawDataStream { get; set; }
[ProtoMember(2)]
public string FileExtension { get; set; }
}但是,当尝试调用它时,我会得到一个类似于'Status(StatusCode=Unimplemented, Detail="Method is unimplemented.")的异常。我知道状态响应有点神秘,所以我发现这实际上只是参数的一个问题。
那我该怎么做呢?
我还试图用以下签名来完成这项工作:
[OperationContract]
Task<bool> UploadPicture(IAsyncEnumerable<byte[]> rawDataStream, string fileExtension);结果相同,显然只允许我提供一个参数(对于一个消息参数和一个响应输出的grpc定义是正确的)。
那我该怎么做呢?
发布于 2020-02-01 14:18:15
这里有两个独立的概念:
message)
IAsyncEnumerable<T> (而不是单个IAsyncEnumerable<T>的Task<T> ),每个单独的消息都必须是完整的和自包含的;封送器(每条消息序列化程序)仅是同步的。
因此:您可以使用IAsyncEnunerable<T>作为服务方法的参数或返回,但不能用作消息上的字段。
如果需要提供流和其他元数据,则有几个选项:
parameter)
CallContext作为第二个
中的可选字段。
https://stackoverflow.com/questions/60017558
复制相似问题