【问题标题】:Add filename and length parameter to WCF stream when Transfermode = Stream当 Transfermode = Stream 时,将文件名和长度参数添加到 WCF 流
【发布时间】:2011-02-03 19:20:38
【问题描述】:

与所有讨论此主题的 SO 帖子相比,我对将流对象包装在 [MessageContract] 中不感兴趣,因为在 streaming 模式下不允许这样做 (afaik)。

当我处于流媒体模式时,如何向客户端返回一些元数据,例如长度和文件名?我可以添加 WCF/SOAP 标头吗?我该怎么做?

我正在考虑扩展文件流类并添加一个[MessageHeader] 属性,但我无法让它工作。

【问题讨论】:

    标签: .net wcf streaming filestream wcf-client


    【解决方案1】:

    这是我们的做法

         [MessageContract]
        public class StreamMessage
        {
            [MessageHeader(MustUnderstand = true)]
            public long Length { get; set; }
            [MessageHeader(MustUnderstand = true)]
            public int ServerVersion { get; set; }
            [MessageHeader(MustUnderstand = true)]
            public byte[] Cerificate { get; set; }
            [MessageBodyMember(Order = 1)]
            public Stream Stream;
        }
    

    【讨论】:

    • 如您所见,消息包含流。我们一直使用流媒体,同时通过 https 流媒体发送非常大的文件。
    • 可能是这种情况,但这是一个仅向前的流。我需要将流对象传递给客户端,并且需要支持随机查找、读取等。这就是为什么我在看 WCF“流模式”
    • 将流传递给客户端实际上不是 StreamingMode 吗?
    • 不,只有当Transfermode 是定义的设置之一时才会发生。限制部分:“流式传输中发生的操作最多可以与一个输入或输出参数签订合同”
    • 是的。但是消息头是 not 参数。实际上,如果您添加其他属性,您会在 WCF 日志中看到很好的异常消息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-20
    • 1970-01-01
    相关资源
    最近更新 更多