首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在protobuf-net.grpc中的消息中使用IAsyncEnumerable?

如何在protobuf-net.grpc中的消息中使用IAsyncEnumerable?
EN

Stack Overflow用户
提问于 2020-02-01 13:58:41
回答 1查看 761关注 0票数 5

因此,最近我了解了如何在IAsyncEnumerable<T>的帮助下使用protobuf-net.grpc进行流处理。这一切都很好,很好,但我现在正面临一个问题。

对于一些调用,我想使用一些元数据和流作为参数进行调用。

例如:

代码语言:javascript
复制
[OperationContract]
Task<bool> UploadPicture(ProfilePictureQuery query);

签名如下:

代码语言:javascript
复制
[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.")的异常。我知道状态响应有点神秘,所以我发现这实际上只是参数的一个问题。

那我该怎么做呢?

我还试图用以下签名来完成这项工作:

代码语言:javascript
复制
[OperationContract]
Task<bool> UploadPicture(IAsyncEnumerable<byte[]> rawDataStream, string fileExtension);

结果相同,显然只允许我提供一个参数(对于一个消息参数和一个响应输出的grpc定义是正确的)。

那我该怎么做呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-01 14:18:15

这里有两个独立的概念:

message)

  • however,

  • gRPC允许消息流通过IAsyncEnumerable<T> (而不是单个IAsyncEnumerable<T>Task<T> ),每个单独的消息都必须是完整的和自包含的;封送器(每条消息序列化程序)仅是同步的

因此:您可以使用IAsyncEnunerable<T>作为服务方法的参数或返回,但不能用作消息上的字段。

如果需要提供流和其他元数据,则有几个选项:

parameter)

  • have

  • 使用http头(通过CallContext作为第二个

  • 服务调用)--一个调用启动事物并获取元数据,一个调用返回流

  • ,其中流包含消息中的一些可选字段,并且只填充第一个或最后一个消息

中的可选字段。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60017558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档