如何通过 WCF 流传输 MemoryStream

Posted

技术标签:

【中文标题】如何通过 WCF 流传输 MemoryStream【英文标题】:How to transfer MemoryStream via WCF Streaming 【发布时间】:2011-11-22 10:29:28 【问题描述】:

我计划通过 WCF Streaming 传递 MemoryStream,但它似乎不起作用,但是当我稍微更改代码以传递 FileStream 时,它正在工作。事实上,我的目的是传递大量业务对象(可序列化)。我正在使用基本的HttpBinding。非常感谢您的建议!

编辑: 该问题的症状是传入流为空。没有错误也没有例外。

【问题讨论】:

如果失败,一定是抛出了异常。你能在哪里抓到它?错误信息是什么?该消息是否为您提供了有关正在发生的事情的任何线索? 非常感谢您的回复。我一时兴起发布了这个问题,因为它让我绝望了几天。 【参考方案1】:

您并没有提供太多细节,但是,我几乎可以肯定我知道问题出在哪里,因为我经常看到这种情况发生。

如果您向MemoryStream 写入内容以作为 WCF 服务操作的结果返回该内容,则需要在返回之前手动将流重置为其开头。 WCF 只会从 当前 位置读取流,因此如果该位置尚未重置,则将返回一个空流。

这至少可以解释您所描述的问题。希望这会有所帮助。

这里有一些示例代码:

    [OperationContract]
    public Stream GetSomeData()
    
        var stream = new MemoryStream();
        using(var file = File.OpenRead("path"))
        
            // write something to the stream:
            file.CopyTo(stream);         
            // here, the MemoryStream is positioned at its end
        
        // This is the crucial part:
        stream.Position = 0L;
        return stream;
    

【讨论】:

以上是关于如何通过 WCF 流传输 MemoryStream的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SQL 文件流 win32 API 并支持 WCF 流

MemoryStream,无法访问已关闭的流

MemoryStream相关知识分享

如何创建返回文件(.xlsx)的 WCF 服务

WCF 实时视频流

通过网络路径获取的图片 btye 图片流互转